天天看點

Python 字典

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)
{}