python基礎(六)dict
阿新 • • 發佈:2019-01-26
- Python內建了字典:dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)儲存,具有極快的查詢速度。
》 d = {‘Michael’: 95, ‘Bob’: 75, ‘Tracy’: 85}
》d[‘Michael’]
95 - 為什麼dict查詢速度這麼快?因為dict的實現原理和查字典是一樣的。假設字典包含了1萬個漢字,我們要查某一個字,一個辦法是把字典從第一頁往後翻,直到找到我們想要的字為止,這種方法就是在list中查詢元素的方法,list越大,查詢越慢。
第二種方法是先在字典的索引表裡(比如部首表)查這個字對應的頁碼,然後直接翻到該頁,找到這個字。無論找哪個字,這種查詢速度都非常快,不會隨著字典大小的增加而變慢。 - 把資料放入dict的方法,除了初始化時指定外,還可以通過key放入:
d = {‘Michael’: 95, ‘Bob’: 75, ‘Tracy’: 85}
d[‘Adam’] = 67
print(d)
將得到{‘Michael’: 95, ‘Bob’: 75, ‘Tracy’: 85, ‘Adam’: 67} - 由於一個key只能對應一個value,所以,多次對一個key放入value,後面的值會把前面的值沖掉:
》d[‘Jack’] = 90
》 d[‘Jack’]
90
》 d[‘Jack’] = 88
》d[‘Jack’]
88 - 如果key不存在,dict就會報錯
要避免key不存在的錯誤,有兩種辦法,一是通過in判斷key是否存在:
》 ‘Thomas’ in d
False
二是通過dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
》d.get(‘Thomas’) - 要刪除一個key,用pop(key)方法,對應的value也會從dict中刪除:
》 d.pop(‘Bob’)
75
》 d
{‘Michael’: 95, ‘Tracy’: 85} - dict內部存放的順序和key放入的順序是沒有關係的。
- 和list比較,dict有以下幾個特點:查詢和插入的速度極快,不會隨著key的增加而變慢;
需要佔用大量的記憶體,記憶體浪費多。
而list相反:查詢和插入的時間隨著元素的增加而增加;佔用空間小,浪費記憶體很少。
所以,dict是用空間來換取時間的一種方法。 - 通過key計算位置的演算法稱為雜湊演算法(Hash)。
要保證hash的正確性,作為key的物件就不能變。在Python中,字串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key:
》 d[key] = ‘a list’
Traceback (most recent call last):
File “”, line 1, in
TypeError: unhashable type: ‘list’