4.13 Python dict字典
Python 字典(dict)是一種無序的、可變的序列,它的元素以 鍵值對(key-value) 的形式存儲。
相對地,列表(list)和元組(tuple)都是有序的序列,它們的元素在底層是挨著存放的。
字典類型是 Python 中唯一的映射類型?!坝成洹笔菙?shù)學(xué)中的術(shù)語,簡單理解,它指的是元素之間相互對應(yīng)的關(guān)系,即通過一個元素,可以唯一找到另一個元素。
字典的每個鍵值對key:value用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
鍵必須是唯一不變的,但值則不必。
值可以取任何數(shù)據(jù)類型,如字符串,數(shù)字或元組。
一個簡單的字典實例:
dict = {'Linux': 'OS', 'Windows': 'OS', 'MACOS': 'OS'}

Python 創(chuàng)建字典
- 使用
{ }創(chuàng)建字典
由于字典中每個元素都包含兩部分,分別是鍵(key)和值(value),因此在創(chuàng)建字典時,鍵和值之間使用冒號:分隔,相鄰元素之間使用逗號,分隔,所有元素放在大括號{ }中。
使用{ }創(chuàng)建字典的語法格式如下:
dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}
其中 dictname 表示字典變量名,key : valuen 表示各個元素的鍵值對。需要注意的是,同一字典中的各個鍵必須唯一,不能重復(fù)。
如下代碼示范了使用花括號語法創(chuàng)建字典:
#使用字符串作為key
scores = {'數(shù)學(xué)': 95, '英語': 92, '語文': 84}
print(scores)
#使用元組和數(shù)字作為key
dict1 = {(20, 30): 'great', 30: [1,2,3]}
print(dict1)
#創(chuàng)建空元組
dict2 = {}
print(dict2)
運行結(jié)果為:
{'數(shù)學(xué)': 95, '英語': 92, '語文': 84}
{(20, 30): 'great', 30: [1, 2, 3]}
{}
可以看到,字典的鍵可以是整數(shù)、字符串或者元組,只要符合唯一和不可變的特性就行;字典的值可以是 Python 支持的任意數(shù)據(jù)類型。
- 通過 fromkeys() 方法創(chuàng)建字典
Python 中,還可以使用 dict 字典類型提供的 fromkeys() 方法創(chuàng)建帶有默認值的字典,具體格式為:
dictname = dict.fromkeys(list,value=None)
其中,list 參數(shù)表示字典中所有鍵的列表(list);value 參數(shù)表示默認值,如果不寫,則為空值 None。
請看下面的例子:
knowledge = {'語文', '數(shù)學(xué)', '英語'}
scores = dict.fromkeys(knowledge, 60)
print(scores)
運行結(jié)果為:
{'語文': 60, '英語': 60, '數(shù)學(xué)': 60}
可以看到,knowledge 列表中的元素全部作為了 scores 字典的鍵,而各個鍵對應(yīng)的值都是 60。這種創(chuàng)建方式通常用于初始化字典,設(shè)置 value 的默認值。
- 通過
dict()映射函數(shù)創(chuàng)建字典
通過 dict() 函數(shù)創(chuàng)建字典的寫法有多種,表 2 羅列出了常用的幾種方式,它們創(chuàng)建的都是同一個字典 a。

注意,無論采用以上哪種方式創(chuàng)建字典,字典中各元素的鍵都只能是字符串、元組或數(shù)字,不能是列表。列表是可變的,不能作為鍵。
如果不為 dict() 函數(shù)傳入任何參數(shù),則代表創(chuàng)建一個空的字典,例如:
# 創(chuàng)建空的字典
d = dict()
print(d)
運行結(jié)果為:{}

4.14 Python dict字典基本操作
由于字典屬于可變序列,所以我們可以任意操作字典中的鍵值對(key-value)。Python 中,常見的字典操作有以下幾種:
- 向現(xiàn)有字典中添加新的鍵值對。
- 修改現(xiàn)有字典中的鍵值對。
- 從現(xiàn)有字典中刪除指定的鍵值對。
- 判斷現(xiàn)有字典中是否存在指定的鍵值對。
初學(xué)者要牢記,字典是由一個一個的 key-value 構(gòu)成的,key 是找到數(shù)據(jù)的關(guān)鍵,Python 對字典的操作都是通過 key 來完成的。
Python字典添加鍵值對
為字典添加新的鍵值對很簡單,直接給不存在的 key 賦值即可,具體語法格式如下:dictname[key] = value
對各個部分的說明:
-
dictname表示字典名稱。 -
key表示新的鍵。 -
value表示新的值,只要是 Python 支持的數(shù)據(jù)類型都可以。
下面代碼演示了在現(xiàn)有字典基礎(chǔ)上添加新元素的過程:
a = {'數(shù)學(xué)':95}
print(a)
#添加新鍵值對
a['語文'] = 89
print(a)
#再次添加新鍵值對
a['英語'] = 90
print(a)
運行結(jié)果:
{'數(shù)學(xué)': 95}
{'數(shù)學(xué)': 95, '語文': 89}
{'數(shù)學(xué)': 95, '語文': 89, '英語': 90}
Python字典修改鍵值對
Python 字典中鍵(key)的名字不能被修改,我們只能修改值(value)。
字典中各元素的鍵必須是唯一的,因此,如果新添加元素的鍵與已存在元素的鍵相同,那么鍵所對應(yīng)的值就會被新的值替換掉,以此達到修改元素值的目的。請看下面的代碼:
a = {'數(shù)學(xué)': 95, '語文': 89, '英語': 90}
print(a)
a['語文'] = 100
print(a)
運行結(jié)果:
{'數(shù)學(xué)': 95, '語文': 89, '英語': 90}
{'數(shù)學(xué)': 95, '語文': 100, '英語': 90}
可以看到,字典中沒有再添加一個{'語文':100}鍵值對,而是對原有鍵值對{'語文': 89}中的 value 做了修改。
Python字典刪除鍵值對
如果要刪除字典中的鍵值對,還是可以使用 del 語句。例如:
# 使用del語句刪除鍵值對
a = {'數(shù)學(xué)': 95, '語文': 89, '英語': 90}
del a['語文']
del a['數(shù)學(xué)']
print(a)
運行結(jié)果為:
{'英語': 90}
判斷字典中是否存在指定鍵值對
如果要判斷字典中是否存在指定鍵值對,首先應(yīng)判斷字典中是否有對應(yīng)的鍵。判斷字典是否包含指定鍵值對的鍵,可以使用 in 或 not in 運算符。
需要指出的是,對于 dict 而言,in 或not in運算符都是基于key` 來判斷的。
例如如下代碼:
a = {'數(shù)學(xué)': 95, '語文': 89, '英語': 90}
# 判斷 a 中是否包含名為'數(shù)學(xué)'的key
print('數(shù)學(xué)' in a) # True
# 判斷 a 是否包含名為'物理'的key
print('物理' in a) # False
運行結(jié)果為:
True
False
通過 in(或 not in)運算符,我們可以很輕易地判斷出現(xiàn)有字典中是否包含某個鍵,如果存在,由于通過鍵可以很輕易的獲取對應(yīng)的值,因此很容易就能判斷出字典中是否有指定的鍵值對。