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

七、字典常用方法(看看就可以)

  1. dict.clear()tt刪除字典內所有元素
  2. dict.copy()tt返回一個字典的淺複製
  3. dict.fromkeys()t創建一個新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應的初始值
  4. dict.get(key, default=None)tt返回指定鍵的值,如果值不在字典中返回default值
  5. dict.items()tt以列表返回可遍歷的(鍵, 值) 元組數組
  6. dict.keys()ttt以列表返回一個字典所有的鍵
  7. dict.setdefault(key, default=None)tt和get()類似, 但如果鍵不存在於字典中,將會添加鍵並將值設為default
  8. dict.update(dict2)tt把字典dict2的鍵/值對更新到dict里
  9. dict.values()tt以列表返回字典中的所有值
  10. pop(key[,default])tt刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。key值必須給出。 否則,返回default值。
  11. popitem()tt隨機返回並刪除字典中的一對鍵和值。

八、總結

記住以下幾點:

1、字典的鍵值對是無序的(Python3.6 開始有序),值可修改,定義字典時鍵值(key=>value)必須成對出現;

2、字典的鍵(key)不可以重複,鍵重複時值以最後一個為準;

3、字典的鍵必須不可變,所以可以用數字,字元串或元組充當,而不能用列表等;

4、不管字典的數據量有多大,他們的訪問速度都是一樣的。


推薦閱讀:

利用簡書首頁文章標題數據生成詞雲
學習筆記三:改善Python程序的91個建議
利用 Python 打造反向 TCP 後門
Python從零開始系列連載(13)——Python程序的基本控制流程(上)
用印象筆記的Python SDK介面開發個自用小工具

TAG:Python | Python入门 | Python教程 |