您好,登錄后才能下訂單哦!
Python內置了字典:dict的支持,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)存儲,具有極快的查找速度。Python中的唯一一種映射類型。
舉個例子,假設要根據同學的名字查找對應的成績,如果用列表(list)實現,需要兩個list:
names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]
給定一個名字,要查找對應的成績,就先要在names中找到對應的位置,再從scores取出對應的成績,list越長,耗時越長。
如果用dict實現,只需要一個“名字”-“成績”的對照表,直接根據名字查找成績,無論這個表有多大,查找速度都不會變慢。用Python寫一個dict如下:
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
為什么dict查找速度這么快?
dict的key必須是不可變對象
dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象。
這是因為dict根據key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的算法稱為哈希算法(Hash)。
要保證hash的正確性,作為key的對象就不能變。在Python中,字符串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key:
>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
和list比較,dict有以下幾個特點:
而list相反:
#創建字典 Key:Value 映射類型 Python中的唯一一種映射類型 雙向鏈表
dicts={'name':'張三','age':12}
#通過Key獲取Value值 通過部首 | 拼音檢索字的操作是一樣的 沒有索引 也沒有下表 元素是無序的
name=dicts.get('name');
print(name)
#借助for循環 遍歷 字典
for key in dicts:
print("Keys:%s Values:%s"%(key,dicts.get(key)))
dict=dict((('name',"張三"),));
print(dict)
#字典的內置方法
#增加元素的方法 同時增加Key和Value
dicts.__setitem__('sex','男');
print(dicts)
#刪除元素的方法 通過Key刪除Value
dicts.pop('name');
print(dicts);
#清空字典元素的方法
dicts.clear();
print(dicts)
#修改字典中元素的值呢 通過Key修改Value
print(dicts['age'])
#修改年齡為歲
dicts['age']=18;
print(dicts)
#根據Key獲取value的兩種方式: get(key) dicts[key]
#如何分別去遍歷字典中的key和value
#獲取字典中的所有key 返回的類型 (列表|元組) type() 獲取該變量的數據類型 keys 元組(元組中的元素不能被修改)
keys=dicts.keys();
for key in keys:
print("字典中的Key:%s"%key)
#獲取字典中的所有value 在字典中非常神奇的特性 在字典中Key不能重復 Value可以重復
values=dicts.items();
for item in values:
print("Keys:%s,Value:%s"%(item[0],item[1]))
dicts.__setitem__('age','男')
print(dicts)
#如果key不存在,dict就會報錯:
>>> d['Thomas']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Thomas'
#要避免key不存在的錯誤,有兩種辦法,一是通過in判斷key是否存在:
>>> 'Thomas' in d
False
#二是通過dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
注意:返回None的時候Python的交互環境不顯示結果。
請務必注意,dict內部存放的順序和key放入的順序是沒有關系的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。