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)。