Python入門 數據結構 dict字典
Dict 字典是無序(3.6版本後有序),可修改,它能存儲任何數據,數據結構和json類似。
一、字典定義
字典的每個值都具備自己獨有的名稱即鍵(key),每個key都有對應的值(value),字典中的key和value必須成對出現。整個字典包括在花括弧『{}』中,它的每個鍵值(key => value)對使用冒號(:)分割,每對值之間用逗號(,)分割。
定義如記錄人員成績的字典,如下:
d = {Woodman: 95, Alan: 85, Bobo: 59} n
我們把姓名Woodman、Alan、Bobo稱為key,對應的成績95、85、59 稱為value,dict 字典可以通過key來查找值,一個key:value 算作一個值。
注意:dict字典用的鍵(key)必須是唯一的,但值則不必。一個字典中不能出現相同名稱的鍵(key),但值能相同,值可以是任何數據類型(字元串、數字、元組、列表、字典等)。
# 混合字典 key不重複,值可以是任意類型nd = {woodman: 98, 2.5: PM, Bobo: [89, 65, 34],Mydict: {Alan: 99}}n
拓展:dict的最大特點是查找速度快,無論dict有10個元素還是10萬個元素,查找速度都一樣。
二、訪問字典
1、獲取dict字典的值
我們可以使用dict[key]來獲取所需要的值。
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}nprint(d[woodman])nprint(d[9.86])nprint(d[AA]) # 會拋出KeyError異常,表示無此鍵(key)n
通過 key 訪問 dict 的 value,只要 key 存在,dict就返回對應的value。如果key不存在,會直拋出 KeyError 異常。
怎麼避免KeyError錯誤?
有兩種方法:
第一種使用 key in dict 選判讀字典中是否存在此key;
另一種是dict自帶的get方法dict.get(key),在Key不存在的時候,返回None
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}nif woodman in d: # d字典中有woodmann print(d[woodman])nif Aric in d: # 判斷字典中是否有Aric鍵n print(d[Aric])nnprint(d.get(Bobo)) # d字典中有Bobo,返回BoBo對應的值nprint(d.get(my)) # d字典中無my,返回Nonen
注意:dict字典根據key存儲值,他是無序的所以我們不能通過索引號訪問數據(Python3.6後字典為有序)
2、獲取dict字典的所有的鍵key和所有的值values(獲取的是key和values的迭代器)
dict.keys() # 獲取所有鍵key的迭代器
dict.values()) # 獲取字典所有的值value的迭代器
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}nprint(d.keys()) # 獲取字典所有的鍵的迭代器nprint(d.values()) # 獲取字典所有的值的迭代器n
輸出:
dict_keys([woodman, Bobo, Mydict, 9.86])ndict_values([98, [89, 65, 34], {Alan: 99}, GM])n
三、新增與修改字典值
dict[key] = value 新增或修改字典值,當key不存在字典中時新增值,存在是則修改它的值
dict.update(otherdict) 批量更新或增加值,根據otherdict字典更新dice字典,otherdict中有dice沒有的值就新增,dice中有的值就修改為otherdict中的值
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}nd[Bobo] = 98 # 更新Bobo的值nprint(d)nd[Aric] = 66 # 字典中無Aric的值,添加Aricnprint(d)nd1 = {Aric: "Im Ariv", woodman: "Im woodman"}nd.update(d1) # 根據d1字典更新d字典,沒有的值新增,有的值修改nprint(d)n
注意:我們key一旦定義我們不能修改key
四、刪除字典元素
dict.pop(key) 刪除對應鍵值
dict.clear() 清空dict
del dict[key] 刪除對應鍵值
del dict 刪除dict,dict無法訪問
示例:
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}nd.pop(9.86) # 刪除9.86 對應的值nprint(d) # 刪除無9.86ndel d[woodman] # 刪除單個值nprint(d) # 刪除無woodmannd.clear() # 清空dict的鍵值,不會刪除引用dnprint(d) # d能訪問ndel d # 刪除字典d所有的值nprint(d) # 字典d無法訪問,NameError異常n
五、字典遍歷
1、通過key遍歷
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}nfor key in d:n print(d[key])n
輸出:
GM
98[89, 65, 34]{Alan: 99}
2、通過dict.items遍歷
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}nfor key, value in d.items():n print(key, :, value)n
輸出:
9.86 : GM
Bobo : [89, 65, 34]Mydict : {Alan: 99}woodman : 98
六、字典常用函數
len(dict) 計算字典元素個數,即鍵的總數
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}nprint(len(d)) # 列印字典鍵的個數,4個n
七、字典常用方法(看看就可以)
- dict.clear()tt刪除字典內所有元素
- dict.copy()tt返回一個字典的淺複製
- dict.fromkeys()t創建一個新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應的初始值
- dict.get(key, default=None)tt返回指定鍵的值,如果值不在字典中返回default值
- dict.items()tt以列表返回可遍歷的(鍵, 值) 元組數組
- dict.keys()ttt以列表返回一個字典所有的鍵
- dict.setdefault(key, default=None)tt和get()類似, 但如果鍵不存在於字典中,將會添加鍵並將值設為default
- dict.update(dict2)tt把字典dict2的鍵/值對更新到dict里
- dict.values()tt以列表返回字典中的所有值
- pop(key[,default])tt刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。key值必須給出。 否則,返回default值。
- popitem()tt隨機返回並刪除字典中的一對鍵和值。
八、總結
記住以下幾點:
1、字典的鍵值對是無序的(Python3.6 開始有序),值可修改,定義字典時鍵值(key=>value)必須成對出現;
2、字典的鍵(key)不可以重複,鍵重複時值以最後一個為準;
3、字典的鍵必須不可變,所以可以用數字,字元串或元組充當,而不能用列表等;
4、不管字典的數據量有多大,他們的訪問速度都是一樣的。
推薦閱讀:
※利用簡書首頁文章標題數據生成詞雲
※學習筆記三:改善Python程序的91個建議
※利用 Python 打造反向 TCP 後門
※Python從零開始系列連載(13)——Python程序的基本控制流程(上)
※用印象筆記的Python SDK介面開發個自用小工具