dict的第一個特點是查找速度快,無論dict有10個元素還是10萬個元素,查找速度都一樣。而list的查找速度隨著元素增加而逐漸下降。
不過dict的查找速度快不是沒有代價的,dict的缺點是占用內存大,還會浪費很多內容,list正好相反,占用內存小,但是查找速度慢。
在Python3.5之前,dict中的元素是無序的,也就是dict中元素的插入順序和打印順序未必一致,比如使用Python3.5之前的版本執(zhí)行以下代碼:
d = { 'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49 } print(d) # ==> {'Bob': 60, 'Ellena': 49, 'Alice': 45, 'Candy': 75, 'David': 86}
可以看到,打印的順序和定義的順序并不一致。
但是在Python3.6、Python3.7版本中,卻得到了有序的結果。
print(d) # ==> {'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}
為什么在不同的版本中,會得到不一樣的結果呢?這是因為底層的實現(xiàn)發(fā)生了改變,我們可以認為在Python3.6的版本以后,dict是有序的,但是一般而言,為了避免不必要的誤解,一般在需要有序的dict時,我們會使用一種叫做Ordereddict的字典,來確保有序。
對于基礎數(shù)據(jù)類型,字符串、數(shù)字等,這些都是不可變的,可以作為dict的key,而對于復雜數(shù)據(jù)類型,經(jīng)過前面的學習,我們知道tuple是不可變的,list是可變的,因此tuple可以作為dict的key,但是list不可以作為dict的key,否則將會報錯。
key = (1, 2, 3) # 以tuple作為key d[key] = True key = [1, 2, 3] d[key] = True # 報錯 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
如上所示,如果將list作為dict的key,將會引起錯誤。
由于dict是按 key 查找,所以,在一個dict中,key不能重復。
通過直接print(d)
,我們打印出來的是完整的一個dict;有時候,我們需要把dict中m一定條件的元素打印出來,比如成績超過60的,在這種情況下,我們需要則需要遍歷dict(這種時候需要使用for循環(huán)),并通過條件判斷把滿足條件的打印出來。
遍歷dict有兩種方法, 第一種是遍歷dict的所有key,并通過key獲得對應的value。
d = { 'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49 } for key in d: # 遍歷d的key value = d[key] if value > 60: print(key, value) # ==> Candy 75 # ==> David 86
第二種方法是通過dict提供的items()
方法,items()
方法會返回dict中所有的元素,每個元素包含key和value。
for key, value in d.items(): if value > 60: print(key, value) # ==> Candy 75 # ==> David 86
同學的近三次成績如下,請把每個同學的每次成績依次輸出。
d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]}
參考答案:
d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]} for key, value in d.items(): for score in value: print(key, score)
請驗證,完成請求
由于請求次數(shù)過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報