1. 程式人生 > >Python——字典與字典方法

Python——字典與字典方法

-s als 如果 訪問 一個 而不是 操作 不同 清除

字典是一種通過名字或者關鍵字引用的得數據結構,其鍵可以是數字、字符串、元組,這種結構類型也稱之為映射。字典類型是Python中唯一內建的映射類型,基本的操作包括如下:
(1)len():返回字典中鍵—值對的數量;
(2)d[k]:返回關鍵字對於的值;
(3)d[k]=v:將值關聯到鍵值k上;
(4)del d[k]:刪除鍵值為k的項;
(5)key in d:鍵值key是否在d中,是返回True,否則返回False。

一、字典的創建
1.1 直接創建字典

d={one:1,two:2,three:3}
print d
print d[two]
print d[three]
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three‘: 3, ‘two‘: 2, ‘one‘: 1}
2
3

1.2 通過dict創建字典

# _*_ coding:utf-8 _*_
items=[(one,1),(two,2),(three,3),(four,4)]
print uitems中的內容:
print items
print u利用dict創建字典,輸出字典內容:
d=dict(items)
print d
print u查詢字典中的內容:
print d[
one] print d[three]
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
items中的內容:
[(‘one‘, 1), (‘two‘, 2), (‘three‘, 3), (‘four‘, 4)]
利用dict創建字典,輸出字典內容:
{‘four‘: 4, ‘three‘: 3, ‘two‘: 2, ‘one‘: 1}
查詢字典中的內容:
1
3

或者通過關鍵字創建字典
# _*_ coding:utf-8 _*_
d=dict(one=1,two=2,three=3)
print u輸出字典內容:
print d print u查詢字典中的內容: print d[one] print d[three]

運算結果: =======RESTART: C:\Users\Mr_Deng\Desktop\test.py======= 輸出字典內容:

{‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

查詢字典中的內容:

1

3

二、字典的格式化字符串

# _*_ coding:utf-8 _*_
d={one:1,two:2,three:3,four:4}
print d
print "three is %(three)s." %d

運算結果: =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘four‘: 4, ‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

three is 3.

三、字典方法
3.1 clear函數:清除字典中的所有項

# _*_ coding:utf-8 _*_
d={one:1,two:2,three:3,four:4}
print d
d.clear()
print d

運算結果: =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘four‘: 4, ‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

{}

請看下面兩個例子
3.1.1

# _*_ coding:utf-8 _*_
d={}
dd=d
d[one]=1
d[two]=2
print dd
d={}
print d
print dd

運算結果: =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘two‘: 2, ‘one‘: 1}

{}

{‘two‘: 2, ‘one‘: 1}

3.1.2

# _*_ coding:utf-8 _*_
d={}
dd=d
d[one]=1
d[two]=2
print dd
d.clear()
print d
print dd

運算結果: =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘two‘: 2, ‘one‘: 1}

{}

{}

3.1.2與3.1.1唯一不同的是在對字典d的清空處理上,3.1.1將d關聯到一個新的空字典上,這種方式對字典dd是沒有影響的,所以在字典d被置空後,字典dd裏面的值仍舊沒有變化。但是在3.1.2中clear方法清空字典d中的內容,clear是一個原地操作的方法,使得d中的內容全部被置空,這樣dd所指向的空間也被置空。
3.2 copy函數:返回一個具有相同鍵值的新字典

# _*_ coding:utf-8 _*_
x={one:1,two:2,three:3,test:[a,b,c]}
print u初始X字典:
print x
print uX復制到Y:
y=x.copy()
print uY字典:
print y
y[three]=33
print u修改Y中的值,觀察輸出:
print y
print x
print u刪除Y中的值,觀察輸出
y[test].remove(c)
print y
print x

運算結果: =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

初始X字典: {‘test‘: [‘a‘, ‘b‘, ‘c‘], ‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

X復制到Y: Y字典: {‘test‘: [‘a‘, ‘b‘, ‘c‘], ‘one‘: 1, ‘three‘: 3, ‘two‘: 2}

修改Y中的值,觀察輸出:

{‘test‘: [‘a‘, ‘b‘, ‘c‘], ‘one‘: 1, ‘three‘: 33, ‘two‘: 2}

{‘test‘: [‘a‘, ‘b‘, ‘c‘], ‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

刪除Y中的值,觀察輸出

{‘test‘: [‘a‘, ‘b‘], ‘one‘: 1, ‘three‘: 33, ‘two‘: 2}

{‘test‘: [‘a‘, ‘b‘], ‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

註:在復制的副本中對值進行替換後,對原來的字典不產生影響,但是如果修改了副本,原始的字典也會被修改。deepcopy函數使用深復制,復制其包含所有的值,這個方法可以解決由於副本修改而使原始字典也變化的問題。

# _*_ coding:utf-8 _*_
from copy import deepcopy
x={}
x[test]=[a,b,c,d]
y=x.copy()
z=deepcopy(x)
print u輸出:
print y
print z
print u修改後輸出:
x[test].append(e)
print y
print z

運算輸出:

輸出:

{‘test‘: [‘a‘, ‘b‘, ‘c‘, ‘d‘]}

{‘test‘: [‘a‘, ‘b‘, ‘c‘, ‘d‘]}

修改後輸出: =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘test‘: [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘]}

{‘test‘: [‘a‘, ‘b‘, ‘c‘, ‘d‘]}

3.3 fromkeys函數:使用給定的鍵建立新的字典,鍵默認對應的值為None

# _*_ coding:utf-8 _*_
d=dict.fromkeys([one,two,three])
print d

運算輸出:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘three‘: None, ‘two‘: None, ‘one‘: None}

或者指定默認的對應值

# _*_ coding:utf-8 _*_
d=dict.fromkeys([one,two,three],unknow)
print d

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘three‘: ‘unknow‘, ‘two‘: ‘unknow‘, ‘one‘: ‘unknow‘}

3.4 get函數:訪問字典成員

# _*_ coding:utf-8 _*_
d={one:1,two:2,three:3}
print d
print d.get(one)
print d.get(four)

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

1

None

註:get函數可以訪問字典中不存在的鍵,當該鍵不存在是返回None
3.5 has_key函數:檢查字典中是否含有給出的鍵

# _*_ coding:utf-8 _*_
d={one:1,two:2,three:3}
print d
print d.has_key(one)
print d.has_key(four)

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

True

False

3.6 items和iteritems函數:items將所有的字典項以列表方式返回,列表中項來自(鍵,值),iteritems與items作用相似,但是返回的是一個叠代器對象而不是列表

# _*_ coding:utf-8 _*_
d={one:1,two:2,three:3}
print d
list=d.items()
for key,value in list:
    print key,:,value

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

three : 3

two : 2

one : 1

# _*_ coding:utf-8 _*_
d={one:1,two:2,three:3}
print d
it=d.iteritems()
for k,v in it:
    print "d[%s]="%k,v

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

d[three]= 3

d[two]= 2

d[one]= 1

3.7 keys和iterkeys:keys將字典中的鍵以列表形式返回,iterkeys返回鍵的叠代器

# _*_ coding:utf-8 _*_
d={one:1,two:2,three:3}
print d
print ukeys方法:
list=d.keys()
print list
print u\niterkeys方法:
it=d.iterkeys()
for x in it:
    print x

運算結果:

{‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

keys方法:

[‘three‘, ‘two‘, ‘one‘]

iterkeys方法:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

three

two

one

3.8 pop函數:刪除字典中對應的鍵

# _*_ coding:utf-8 _*_
d={one:1,two:2,three:3}
print d
d.pop(one)
print d

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

{‘three‘: 3, ‘two‘: 2}

3.9 popitem函數:移出字典中的項

# _*_ coding:utf-8 _*_
d={one:1,two:2,three:3}
print d
d.popitem()
print d

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

{‘two‘: 2, ‘one‘: 1}

3.10 setdefault函數:類似於get方法,獲取與給定鍵相關聯的值,也可以在字典中不包含給定鍵的情況下設定相應的鍵值

# _*_ coding:utf-8 _*_
d={one:1,two:2,three:3}
print d
print d.setdefault(one,1)
print d.setdefault(four,4)
print d

運算結果:

{‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

1

4

{‘four‘: 4, ‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

3.11 update函數:用一個字典更新另外一個字典

# _*_ coding:utf-8 _*_
d={
    one:123,
    two:2,
    three:3
   }
print d
x={one:1}
d.update(x)
print d

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{‘three‘: 3, ‘two‘: 2, ‘one‘: 123}

{‘three‘: 3, ‘two‘: 2, ‘one‘: 1}

3.12 values和itervalues函數:values以列表的形式返回字典中的值,itervalues返回值得叠代器,由於在字典中值不是唯一的,所以列表中可以包含重復的元素

# _*_ coding:utf-8 _*_
d={
    one:123,
    two:2,
    three:3,
    test:2
   }
print d.values()

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

[2, 3, 2, 123]

Python——字典與字典方法