Python內(nèi)置了字典:dict的支持,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)存儲(chǔ),具有極快的查找速度。Python中的唯一一種映射類型。
成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括甘孜州網(wǎng)站建設(shè)、甘孜州網(wǎng)站制作、甘孜州網(wǎng)頁制作以及甘孜州網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,甘孜州網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到甘孜州省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
舉個(gè)例子,假設(shè)要根據(jù)同學(xué)的名字查找對(duì)應(yīng)的成績,如果用列表(list)實(shí)現(xiàn),需要兩個(gè)list:
names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]
給定一個(gè)名字,要查找對(duì)應(yīng)的成績,就先要在names中找到對(duì)應(yīng)的位置,再從scores取出對(duì)應(yīng)的成績,list越長,耗時(shí)越長。
如果用dict實(shí)現(xiàn),只需要一個(gè)“名字”-“成績”的對(duì)照表,直接根據(jù)名字查找成績,無論這個(gè)表有多大,查找速度都不會(huì)變慢。用Python寫一個(gè)dict如下:
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
為什么dict查找速度這么快?
dict的key必須是不可變對(duì)象
dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對(duì)象。
這是因?yàn)閐ict根據(jù)key來計(jì)算value的存儲(chǔ)位置,如果每次計(jì)算相同的key得出的結(jié)果不同,那dict內(nèi)部就完全混亂了。這個(gè)通過key計(jì)算位置的算法稱為哈希算法(Hash)。
要保證hash的正確性,作為key的對(duì)象就不能變。在Python中,字符串、整數(shù)等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key:
>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
File "", line 1, in
TypeError: unhashable type: 'list'
和list比較,dict有以下幾個(gè)特點(diǎn):
而list相反:
#創(chuàng)建字典 Key:Value 映射類型 Python中的唯一一種映射類型 雙向鏈表
dicts={'name':'張三','age':12}
#通過Key獲取Value值 通過部首 | 拼音檢索字的操作是一樣的 沒有索引 也沒有下表 元素是無序的
name=dicts.get('name');
print(name)
#借助for循環(huán) 遍歷 字典
for key in dicts:
print("Keys:%s Values:%s"%(key,dicts.get(key)))
dict=dict((('name',"張三"),));
print(dict)
#字典的內(nèi)置方法
#增加元素的方法 同時(shí)增加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)
#根據(jù)Key獲取value的兩種方式: get(key) dicts[key]
#如何分別去遍歷字典中的key和value
#獲取字典中的所有key 返回的類型 (列表|元組) type() 獲取該變量的數(shù)據(jù)類型 keys 元組(元組中的元素不能被修改)
keys=dicts.keys();
for key in keys:
print("字典中的Key:%s"%key)
#獲取字典中的所有value 在字典中非常神奇的特性 在字典中Key不能重復(fù) Value可以重復(fù)
values=dicts.items();
for item in values:
print("Keys:%s,Value:%s"%(item[0],item[1]))
dicts.__setitem__('age','男')
print(dicts)
#如果key不存在,dict就會(huì)報(bào)錯(cuò):
>>> d['Thomas']
Traceback (most recent call last):
File "", line 1, in
KeyError: 'Thomas'
#要避免key不存在的錯(cuò)誤,有兩種辦法,一是通過in判斷key是否存在:
>>> 'Thomas' in d
False
#二是通過dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
注意:返回None的時(shí)候Python的交互環(huán)境不顯示結(jié)果。
請(qǐng)務(wù)必注意,dict內(nèi)部存放的順序和key放入的順序是沒有關(guān)系的。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。