Python內置了字典:dict,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)存儲,具有極快的查找速度。
字典不僅可以保存值,還能對值進行描述使用大括號來表示一個字典,不僅有值value,還有值的描述key
字典里的數(shù)據(jù)都是以鍵值對key-value的形式保留的
key和value之間使用冒號:來連接
多個鍵值對之間使用逗號,來分割
person = ['zhansan',18,98,97,180,150]
person = {'name':'zhangsan','age':'18',
'math':98,'Chinese':97,
'height':180,'weight':150}
- 字典里的key不允許重復,如果key重復了,后一個key對應的值會覆蓋前一個
- 字典里的value可以是任意數(shù)據(jù)類型,但是key只能使用不可變的數(shù)據(jù)類型,一般使用字符串
- 字典的保存時無序的,不能通過下標獲取
- 假設字典包含了1萬個漢字,我們要查某一個字,一個辦法是把字典從第一頁往后翻,直到找到我們想要的字為止,這種方法就是在list中查找元素的方法,list越大,查找越慢。
- 先在字典的索引表里(比如部首表)查這個字對應的頁碼,然后直接翻到該頁,找到這個字,無論找哪個字,這種查找速度都非???,不會隨著字典大小的增加而變慢。
- dict就是第二種實現(xiàn)方式,給定一個名字,比如'selina',dict在內部就可以直接計算出selina對應的存放成績的“頁碼”,也就是98這個數(shù)字存放的內存地址,直接取出來,所以速度非???。
- 這種key-value存儲方式,在放進去的時候,必須根據(jù)key算出value的存放位置,這樣,取的時候才能根據(jù)key直接拿到value。把數(shù)據(jù)放入dict的方法,除了初始化時指定外,還可以通過key放入:
d['chao']=80
d['chao']
80 - 由于一個key只能對應一個value,所以,多次對一個key放入value,后面的值會把前面的值沖掉:
d['ella']=70
d['ella']
70
d['ella']=60
d['ella']
60 - 如果key不存在,dict就會報錯。要避免key不存在的錯誤,有兩種辦法
一是通過in判斷key是否存在:
'haha' in d
False
二是通過dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
d.get('hehe')
d.get('hehe', -1)
-1 - 要刪除一個key,用pop(key)方法,對應的value也會從dict中刪除:
d.pop('tingting')
88
d
{'selina':98,'hebe':93}
注意:dict內部存放的順序和key放入的順序是沒有關系的。 - 和list比較,dict有以下幾個特點:
1.查找和插入的速度極快,不會隨著key的增加而增加
2.需要占用大量的內存,內存浪費多
而list相反:
1.查找和插入的時間隨著元素的增加而增加
2.占用空間小,浪費內存很少
所以,dict是用空間來換取時間的一種方法。 - dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象。
這是因為dict根據(jù)key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的算法稱為哈希算法(Hash)。