給妹子講python S01E02學會用字典

2021-09-20 08:51:14 字數 3334 閱讀 4272

【妹子說】上次講了列表,今天接著講講字典吧。

首先我要說,字典這個容器型別真的非常好用,也非常重要。

字典和列表完全不同,字典裡的物件是無序的,他是通過一對對的鍵和值來反映一種對映關係。字典裡,每個鍵都是唯一的,我們可以通過鍵來訪問對應的值,而不能像列表那樣通過位置來索引。

首先來看看怎樣用最簡單的方法生成乙個字典,先弄乙個出來再說。

d = ,

'job' : ['dev','mgr'],

'age' : 0.5,

'addr': 'beijing'

}print(d)

, 'age': 0.5}

從這個例子的輸出結果我們可以看出,字典也是可以包含任意的資料型別,即所謂的異構性,甚至可以巢狀乙個字典,同時從列印的結果看,字典裡的各個元素確實沒有什麼順序可言。

對字典值的讀取和修改也很簡單

d = 

print(d['food'])

d['***'] = 'gender'

print(d)

spam

我們用『food』鍵就可以讀取其對應的值---字串物件『spam』,此外我們還可以原地增加『***』鍵以及對應的值,當然,也可以原地修改其他已有的鍵和值。

【妹子問】恩,可是我覺得這種方法很死板呀,他要求我們乙個乙個的把資料手動輸入來構建字典,這樣子感覺不是很方便呢

這個問題問的太好了。特別是當我們事先不知道字典有哪些鍵和值的時候,如果想利用在程式中動態獲取的資料集來生成字典,上述方法就辦不到了。

基於這種需求,我們再介紹其他幾個生成字典的方法:

第一種方法:初始為空字典,動態填充新的鍵和值

d = {}

d['name'] = 'bob'

d['job'] = 'dev'

print(d)

重點是第二種方法,用列表動態生成字典。

一般來說字典的鍵是事先約定好的,比如姓名、性別、生日等等,而值往往是要在程式執行過程當中通過使用者輸入、網頁資料抓取等不同手段動態獲取的。本方法可以在獲取值列表後動態生成乙個字典。

key_list = ['a','b','c']

value_list = [11,22,33]

d = dict(zip(key_list, value_list))

print(d)

第三種方法,用鍵值對元組組成的列表構造字典。(元組我們後面要講,就是這個圓括號)

d = dict([('aa',11),('bb',22),('cc',33)])

print(d)

【妹子問】哦,有了這些好用的方法我就放心啦。還有乙個問題:如果我有兩個已經生成的字典,想要把他們合併應該怎麼做呢?

做法很簡單

d1 = 

d2 =

d1.update(d2)

print(d1)

不過要注意,如果這兩個字典中有衝突的鍵,那麼會無規律的進行覆蓋,所以應該避免這種情況

【妹子說】現在我明白在不同使用場景下如何來生成乙個字典了,那我如果訪問乙個不存在的字典鍵,應該會報錯吧

這麼說也對,也不對。

我們具體看看對於鍵不存在這種情況下的處理技巧。

d = 

print(d['d'])

traceback (most recent call last):

file "e:/12homework/12homework.py", line 2, in print(d['d'])

keyerror: 'd'

用這種直接訪問的方式,如果鍵不存在就會報錯,但是可以引入in判斷方法進行避免

d = 

print('c' in d)

if not 'c' in d:

print('missing')

false

missing

其實,有一種更高階的方法實現了上述的判斷功能。那就是get方法,get方法中第二個引數指的是鍵不存在時指定返回的預設值,如果不設定這個值,則返回none

d = 

print(d.get('d',0))

0

【妹子又問了】我們在實際使用字典時,很多情況下不應該這麼乙個乙個的手動訪問字典鍵吧,比如我想一次性獲取所有的鍵,應該怎麼做?

這又是乙個好問題,

我們可以用下面的方法來一次性獲取包含所有鍵的列表:

d = 

print(list(d.keys()))

['b', 'a', 'd', 'e', 'c']

d.keys方法返回的是乙個迭代器,而不是直接就給出乙個列表,關於迭代器後面會專門講的,這裡只需記住此處將迭代器作為引數來初始化乙個list,可以一次性生成所有的鍵,並將其列印出來。

想獲取值的列表,處理方法也十分類似

d = 

print(list(d.values()))

[11, 33, 44, 55, 22]

我們還可以用同樣類似的方法同時獲取鍵值對的列表

d = 

print(list(d.items()))

[('d', 44), ('a', 11), ('c', 33), ('e', 55), ('b', 22)]

【妹子說】和列表相模擬,下面是不是也得說說字典的刪除和排序問題?

對,字典和列表大同小異。而且刪除也是利用del和pop兩種方法

d = 

del d['a']

print(d)

pop方法是在刪除指定鍵對應的元素的同時,返回這個鍵所對應的值

d = 

print(d.pop('a'))

print(d)

11

【妹子反問我了】我記得你最開始的時候說,在字典裡物件是無序的呀,那怎麼還存在排序的概念呢?

原來是挖坑在等我呀,字典的排序操作實際上是在對鍵進行排序,他返回乙個排好序的鍵的列表

d = 

print(sorted(d))

print(sorted(d.keys()))

['a', 'b', 'c', 'd', 'e']

['a', 'b', 'c', 'd', 'e']

這裡埋乙個伏筆,內建函式sorted接受的都是可迭代物件,這個反覆出現的概念後面我們一定會好好談談。

給妹子講python S01E23初識異常處理

1.異常的預設處理和主動捕獲 2.主動觸發異常和自定義異常 3.finally終止 塊的用法 妹子問 從字面上來看,異常是程式執行時出現的錯誤吧。沒錯,每當在執行時檢測到程式錯誤時,python就會引發異常。對待異常有兩種方法 一是可以在程式中捕捉和響應錯誤 或者忽略已發生的異常。如果是忽略已發生的...

給妹子講python S01E23初識異常處理

1.異常的預設處理和主動捕獲 2.主動觸發異常和自定義異常 3.finally終止 塊的用法 妹子問 從字面上來看,異常是程式執行時出現的錯誤吧。沒錯,每當在執行時檢測到程式錯誤時,python就會引發異常。對待異常有兩種方法 一是可以在程式中捕捉和響應錯誤 或者忽略已發生的異常。如果是忽略已發生的...

給妹子講python S01E09檔案操作小意思

前面幾集裡,我們詳細介紹了python字串以及編譯碼的有關內容,這些內容實質上也是檔案操作的基礎。今天這一集,我們就正好來說說檔案操作。先預熱一下,看乙個利用open函式開啟檔案的簡單例子 myfile open myfile.txt w myfile open myfile.txt r 妹子說 檔...