字典:python中唯一內建的映射類型,本質就是鍵-值對。通過鍵和值關聯
4.1字典的使用
通過鍵來找值,而不必用索引
4.2創建和使用字典
phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}
note:字典中的鍵是唯一的,而值不唯一。
4.2.1 dict函數
創建字典更方便:
>>>items=[('name','Gumby'),('age',42)]
>>>d=dict(items)
>>>d
{'age':42, 'name': 'Gumby'}
>>>d['name']
'Gumby'
dict函數不是真正的函數,和list、tuple、str一樣是個類型。
4.2.2 基本字典操作
len(d):返回d中項(鍵值對)數量
d[k]:返回關聯到鍵k上的值
d[k]=v:將值v關聯到鍵k上
del d[k]:刪除鍵爲k的項
k in d :檢查d中是否有含有鍵爲k的項
4.2.3字典的格式化字符串
>>>phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}
>>>"%(Cecil)s" % phonebook
'3258'
4.2.4字典方法
1.clear
清除字典中所有項,這個是原地操作
2.copy
返回一個具有相同鍵值對的新字典(實現的是淺複製):替換不改變,原地修改會改變(增加或減少)
可以使用深複製函數:deepcopy
3.fromkeys
使用給定的鍵建立新的字典,每個鍵都對應一個默認的值None
>>>{}.fromkeys(['name','age'])
{'age':None, 'name': None}
>>>dict.fromkeys(['name','age'],'(unknown)')#可設置默認值
{'age':'(unknown)', 'name': '(unknown)'}
使用dict不用創建一個空字典
4.get
更寬鬆的訪問字典項的方法,訪問不存在的項時不會出錯
>>>d={}
>>>print d["dsa"]
Traceback(most recent call last):
File "<pyshell#11>", line 1,in <module>
print d["dsa"]
KeyError:'dsa'
使用get
>>>print d.get('dsa','N/A')#默認返回None,可改
N/A
5.has_key
檢查字典中是否含有特定的鍵,相當於k in d.
6.items和iteritems
Items:將字典所有項以列表形式返回,不遵循次序
>>>d={'name':'zhangsan','age':'43'}
>>>d.items()
[('age','43'), ('name', 'zhangsan')]
Iteritems類似,不過返回的是迭代器
>>>it=d.iteritems()
>>>it
<dictionary-itemiteratorobject at 0x02EBC210>
>>>list(it)
[('age','43'), ('name', 'zhangsan')]
7.keys和iterkeys
Keys:鍵以列表的形式返回
Iterkeys:返回鍵的迭代器
8.pop
獲得給定鍵的值:然後將此鍵值對刪掉
>>>d.pop('age')
'43'
>>>d
{'name':'zhangsan'}
9.popitem
不用獲取鍵,而隨機彈出一個鍵值對
>>>d={'name':'zhangsan','age':'43'}
>>>d.popitem()
('age','43')
>>>d
{'name':'zhangsan'}
10.setdefault
某種程度類似於ge上增加了更新
使用get:
>>>d
{'name':'zhangsan'}
>>>d.get('age')
>>>print d.get('age')
None
使用setdefault:
>>>d.setdefault('age','34')
'34'
>>>d
{'age':'34', 'name': 'zhangsan'}
11.update
利用一個字典項更新另外一個字典項
>>>d={'name':'zhangsan','age':'43'}
>>>x={'age':'20'}
>>>d.update(x)
>>>d
{'age':'20', 'name': 'zhangsan'}
12.values和itervalues
Values:以列表的形式返回字典中的值
Itervalues:返回值的迭代器
>>>d
{'age':'34', 'name': 'zhangsan'}
>>>d.values()
['20','zhangsan']