字典概念
Python 字典(dict)是一種無(wú)序的、可變的序列,它的元素以“鍵值對(duì)(key-value)”的形式存儲(chǔ)。相對(duì)地,列表(list)和元組(tuple)都是有序的序列,它們的元素在底層是挨著存放的。
字典類(lèi)型是 Python 中唯一的映射類(lèi)型?!坝成洹笔菙?shù)學(xué)中的術(shù)語(yǔ),簡(jiǎn)單理解,它指的是元素之間相互對(duì)應(yīng)的關(guān)系,即通過(guò)一個(gè)元素,可以唯一找到另一個(gè)元素。如圖 1 所示。
字典中,習(xí)慣將各元素對(duì)應(yīng)的索引稱為鍵(key),各個(gè)鍵對(duì)應(yīng)的元素稱為值(value),鍵及其關(guān)聯(lián)的值稱為“鍵值對(duì)”。
字典類(lèi)型很像學(xué)生時(shí)代常用的新華字典。我們知道,通過(guò)新華字典中的音節(jié)表,可以快速找到想要查找的漢字。
其中,字典里的音節(jié)表就相當(dāng)于字典類(lèi)型中的鍵,而鍵對(duì)應(yīng)的漢字則相當(dāng)于值。
總的來(lái)說(shuō),字典類(lèi)型所具有的主要特征如表 1 所示。
主要特征 | 解釋 |
---|---|
通過(guò)鍵而不是通過(guò)索引來(lái)讀取元素 | 字典類(lèi)型有時(shí)也稱為關(guān)聯(lián)數(shù)組或者散列表(hash)。它是通過(guò)鍵將一系列的值聯(lián)系起來(lái)的,這樣就可以通過(guò)鍵從字典中獲取指定項(xiàng),但不能通過(guò)索引來(lái)獲取。 |
字典是任意數(shù)據(jù)類(lèi)型的無(wú)序集合 | 和列表、元組不同,通常會(huì)將索引值 0 對(duì)應(yīng)的元素稱為第一個(gè)元素,而字典中的元素是無(wú)序的。 |
字典是可變的,并且可以任意嵌套 | 字典可以在原處增長(zhǎng)或者縮短(無(wú)需生成一個(gè)副本),并且它支持任意深度的嵌套,即字典存儲(chǔ)的值也可以是列表或其它的字典。 |
字典中的鍵必須唯一 | 字典中,不支持同一個(gè)鍵出現(xiàn)多次,否則只會(huì)保留最后一個(gè)鍵值對(duì)。 |
字典中的鍵必須不可變 | 可變字典中每個(gè)鍵值對(duì)的鍵是不可變的,只能使用數(shù)字、字符串或者元組,不能使用列表。 |
和列表、元組一樣,字典也有它自己的類(lèi)型。Python 中,字典的數(shù)據(jù)類(lèi)型為 dict,通過(guò) type() 函數(shù)即可查看:
>>> a = {'one': 1, 'two': 2, 'three': 3} #a 是一個(gè)字典類(lèi)型
>>> type(a)
<class 'dict'>
Python 創(chuàng)建字典
使用 { } 創(chuàng)建字典
由于字典中每個(gè)元素都包含兩部分,分別是鍵(key)和值(value),因此在創(chuàng)建字典時(shí),鍵和值之間使用冒號(hào):分隔,相鄰元素之間使用逗號(hào),分隔,所有元素放在大括號(hào){ }中。
使用{ }創(chuàng)建字典的語(yǔ)法格式如下:
dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}
其中 dictname 表示字典變量名,keyn : valuen 表示各個(gè)元素的鍵值對(duì)。需要注意的是,同一字典中的各個(gè)鍵必須唯一,不能重復(fù)。
如下代碼示范了使用花括號(hào)語(yǔ)法創(chuàng)建字典:
1. #使用字符串作為 key
2. scores = {'數(shù)學(xué)': 95, '英語(yǔ)': 92, '語(yǔ)文': 84}
3. print(scores)
4.
5. #使用元組和數(shù)字作為 key
6. dict1 = {(20, 30): 'great', 30: [1,2,3]}
7. print(dict1)
8.
9. #創(chuàng)建空元組
10. dict2 = {}
11. p p rint(dict2)
運(yùn)行結(jié)果為:
{'數(shù)學(xué)': 95, '英語(yǔ)': 92, '語(yǔ)文': 84}
{(20, 30): 'great', 30: [1, 2, 3]}
{}
可以看到,字典的鍵可以是整數(shù)、字符串或者元組,只要符合唯一和不可變的特性就行;字典的值可以是Python 支持的任意數(shù)據(jù)類(lèi)型。
通過(guò) fromkeys() 方法創(chuàng)建字典
Python 中,還可以使用 dict 字典類(lèi)型提供的 fromkeys() 方法創(chuàng)建帶有默認(rèn)值的字典,具體格式為:
dictname = dict.fromkeys(list,value=None)
其中,list 參數(shù)表示字典中所有鍵的列表(list);value 參數(shù)表示默認(rèn)值,如果不寫(xiě),則為空值 None。
請(qǐng)看下面的例子:
1. knowledge = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']
2. scores = dict.fromkeys(knowledge, 60)
3. print(scores)
運(yùn)行結(jié)果為:
{'語(yǔ)文': 60, '英語(yǔ)': 60, '數(shù)學(xué)': 60}
可以看到,knowledge 列表中的元素全部作為了 scores 字典的鍵,而各個(gè)鍵對(duì)應(yīng)的值都是 60。這種創(chuàng)建方式通常用于初始化字典,設(shè)置 value 的默認(rèn)值。
通過(guò) dict() 映射函數(shù)創(chuàng)建字典
通過(guò) dict() 函數(shù)創(chuàng)建字典的寫(xiě)法有多種,表 2 羅列出了常用的幾種方式,它們創(chuàng)建的都是同一個(gè)字典 a。
創(chuàng)建格式 | 注意事項(xiàng) |
---|---|
a = dict(str1=value1, str2=value2,str3=value3) | str 表示字符串類(lèi)型的鍵,value 表示鍵對(duì)應(yīng)的值。使用此方式創(chuàng)建字典時(shí),字符串不能帶引號(hào)。 |
#方式 1demo = [(‘two’,2), (‘one’,1),(‘three’,3)]#方式 2demo = [[‘two’,2], [‘one’,1],[‘three’,3]]#方式 3demo = ((‘two’,2), (‘one’,1),(‘three’,3))#方式 4demo = ([‘two’,2], [‘one’,1], [‘three’,3])a = dict(demo) | 向 dict() 函數(shù)傳入列表或元組,而它們中的元素又各自是包含 2 個(gè)元素的列表或元組,其中第一個(gè)元素作為鍵,第二個(gè)元素作為值。 |
keys = [‘one’, ‘two’, ‘three’] #還可以是字符串或元組values = [1, 2, 3] #還可以是字符串或元組a = dict( zip(keys, values) ) | 通過(guò)應(yīng)用 dict() 函數(shù)和 zip() 函數(shù),可將前兩個(gè)列表轉(zhuǎn)換為對(duì)應(yīng)的字典 |
注意,無(wú)論采用以上哪種方式創(chuàng)建字典,字典中各元素的鍵都只能是字符串、元組或數(shù)字,不能是列表。列表
是可變的,不能作為鍵。
如果不為 dict() 函數(shù)傳入任何參數(shù),則代表創(chuàng)建一個(gè)空的字典,例如:
1. # 創(chuàng)建空的字典
2. d = dict()
3. print(d)
運(yùn)行結(jié)果為:
{}
Python 訪問(wèn)字典
列表和元組是通過(guò)下標(biāo)來(lái)訪問(wèn)元素的,而字典不同,它通過(guò)鍵來(lái)訪問(wèn)對(duì)應(yīng)的值。因?yàn)樽值渲械脑厥菬o(wú)序的,每個(gè)元素的位置都不固定,所以字典也不能像列表和元組那樣,采用切片的方式一次性訪問(wèn)多個(gè)元素。
Python 訪問(wèn)字典元素的具體格式為:
dictname[key]
其中,dictname 表示字典變量的名字,key 表示鍵名。注意,鍵必須是存在的,否則會(huì)拋出異常。
請(qǐng)看下面的例子:
1. tup = (['two',26], ['one',88], ['three',100], ['four',-59])
2. dic = dict(tup)
3. print(dic['one']) #鍵存在
4. print(dic['five']) #鍵不存在
運(yùn)行結(jié)果:
88
Traceback (most recent call last):
File "C:\Users\mozhiyan\Desktop\demo.py", line 4, in <module>
print(dic['five']) #鍵不存在
KeyError: 'five'
除了上面這種方式外,Python 更推薦使用 dict 類(lèi)型提供的 get() 方法來(lái)獲取指定鍵對(duì)應(yīng)的值。當(dāng)指定的鍵不存在時(shí),get() 方法不會(huì)拋出異常。
get() 方法的語(yǔ)法格式為:
dictname.get(key[,default])
其中,dictname 表示字典變量的名字;key 表示指定的鍵;default 用于指定要查詢的鍵不存在時(shí),此方法返回的默認(rèn)值,如果不手動(dòng)指定,會(huì)返回 None。
get() 使用示例:
1. a = dict(two=0.65, one=88, three=100, four=-59)
2. print( a.get('one') )
運(yùn)行結(jié)果:
88
注意,當(dāng)鍵不存在時(shí),get() 返回空值 None,如果想明確地提示用戶該鍵不存在,那么可以手動(dòng)設(shè)置 get() 的第二個(gè)參數(shù),例如:
1. a = dict(two=0.65, one=88, three=100, four=-59)
2. print( a.get('five', '該鍵不存在') )
運(yùn)行結(jié)果:
該鍵不存在
Python 刪除字典
和刪除列表、元組一樣,手動(dòng)刪除字典也可以使用 del 關(guān)鍵字,例如:
1. a = dict(two=0.65, one=88, three=100, four=-59)
2. print(a)
3. del a
4. print(a)
運(yùn)行結(jié)果:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-841012.html
{'two': 0.65, 'one': 88, 'three': 100, 'four': -59}
Traceback (most recent call last):
File "C:\Users\mozhiyan\Desktop\demo.py", line 4, in <module>
print(a)
NameError: name 'a' is not defined
Python 自帶垃圾回收功能,會(huì)自動(dòng)銷(xiāo)毀不用的字典,所以一般不需要通過(guò) del 來(lái)手動(dòng)刪除。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-841012.html
到了這里,關(guān)于【Python】Python dict (字典)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!