python資料結構之字典方法
字典是一種通過名字或者關鍵字引用的得資料結構,其鍵可以是數字、字串、元組,這種結構型別也稱之為對映。字典型別是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
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
1.2 通過dict建立字典
-
# _*_ coding:utf-8 _*_
-
items=[('one',1),('two',2),('three',3),('four',4)]
-
print u'items中的內容:'
-
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
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
或者通過關鍵字建立字典
-
# _*_ 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
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
二、字典的格式化字串
-
# _*_ 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.
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
三、字典方法
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}
-
{}
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
請看下面兩個例子
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}
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
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}
-
{}
-
{}
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
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 u'X複製到Y:'
-
y=x.copy()
-
print u'Y字典:'
-
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}
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
注:在複製的副本中對值進行替換後,對原來的字典不產生影響,但是如果修改了副本,原始的字典也會被修改。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']}
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
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}
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
或者指定預設的對應值
-
# _*_ 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'}
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
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
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
注: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
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
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
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
-
# _*_ 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
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
3.7 keys和iterkeys:keys將字典中的鍵以列表形式返回,iterkeys返回鍵的迭代器
-
# _*_ coding:utf-8 _*_
-
d={'one':1,'two':2,'three':3}
-
print d
-
print u'keys方法:'
-
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
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
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}
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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}
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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}
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
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}
-
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
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]
-
>>>