Python中的字典與C++中的map非常類似,即按照Key-value的模式進行存儲,不過功能更加強大。
一、字典的建立
字典建立可以用大括号來直接進行,也可以對其他序列用dict()函數來進行:
a = [('name', 'lustar'), ('age', 42)]
dic1 = dict(a)
dic2 = dict(name='lustar', age=42)#dic1 dic2是相同的
print dic1['age'], dic2['age']
42 42
二、字典的基本操作
字典有一些類似于序列的操作,也有一些不同之處。于C++中的map<type>類似,可以添加删除鍵,以及通過直接指派增加新的鍵:
a = [('name', 'lustar'), ('age', 42)]
dic = dict(a)
dic['age'] = 22 # change value
print len(dic) # length of a
del dic['age'] # delete key:age
print 'age' in dic # check if age is in dic
dic['age'] = 22 # add 'age-22' to dic
print 'age' in dic
三、字典的方法
(1)clear方法會清除所有的字典項,傳回None。
dic = dict([('name', 'lustar'), ('age', 42)])
print dic.clear()
print dic
None
{}
(2)copy方法。該方法會傳回一個新的字典,不過一定要注意的是,執行的是淺拷貝。也就是說,如果對copy後的對象的value執行修改(原地修改),原來的字典對象也會受到影響;替換操作不會使得原對象受到影響。
dic = dict([('name', ['lustar']), ('age', 42)])
dic_copy = dic.copy()
dic['name'] = 'LL'
print dic == dic_copy
False # 沒有影響到原來的對象
dic_copy['name'].append('lulu')
print dic == dic_copy
True # 影響到了原來的對象
(3)fromkey方法為所有的鍵建立一個字典,值全部為None。
(4)get、has_key方法。get比較寬松,如果鍵存在,傳回對應值;不存在則傳回None,不産生異常。has_key與key in dict類似。
dic = dict([('name', 'lustar'), ('age', 42)])
print dic.get('height'), dic.get('name')
print dic.has_key('height'), dic.has_key('name')
None lustar
False True
(5)items/iteritems,keys/iterkeys,values/itervalues方法。顧名思義,items把所有的鍵值對以清單的形式傳回,keys和values則以清單形式傳回鍵/值,iter對應傳回類型為疊代器。
dic = dict([('name', 'lustar'), ('age', 42)])
iter1 = dic.iteritems()
item1 = dic.items()
print item1
for i in iter1:
print i
[('age', 42), ('name', 'lustar')]
('age', 42)
('name', 'lustar')
(6)pop和popitem方法。pop删除一個鍵值對,并傳回值;popitem則彈出一個鍵值對并傳回。
dic = dict([('name', 'lustar'), ('age', 42)])
print dic.pop('name') # 移除'name'-'lustar',傳回lustar
print dic
print dic.popitem()# 移除'age'-42并傳回
print dic
lustar
{'age': 42}
('age', 42)
{}