在本文中,您將學(xué)習(xí)關(guān)于Python dictionary的所有內(nèi)容;如何創(chuàng)建、訪問、添加和刪除元素,以及各種內(nèi)置方法。
Python字典是一個(gè)無序的項(xiàng)集合。其他復(fù)合數(shù)據(jù)類型只有值作為元素,而字典有一個(gè)鍵:值對(duì)(key:value)。
字典被優(yōu)化以在鍵已知時(shí)檢索值。
創(chuàng)建字典就像將項(xiàng)目放在用逗號(hào)分隔的大括號(hào){}中一樣簡(jiǎn)單。
一個(gè)項(xiàng)目具有一個(gè)鍵和對(duì)應(yīng)的值,表示為一對(duì),鍵:值。
盡管值可以是任何數(shù)據(jù)類型并且可以重復(fù),但是鍵必須是不可變的類型(具有不可變?cè)氐?a href="python-string.html" title="Python字符串">字符串,數(shù)字或元組)并且必須是唯一的。
# 空字典 my_dict = {} # 帶有整數(shù)鍵的字典 my_dict = {1: 'apple', 2: 'ball'} # 混合鍵字典 my_dict = {'name': 'John', 1: [2, 4, 3]} # 使用 dict() my_dict = dict({1:'apple', 2:'ball'}) # 將每個(gè)項(xiàng)作為一對(duì)的序列 my_dict = dict([(1,'apple'), (2,'ball')])
如您在上面看到的,我們還可以使用內(nèi)置函數(shù)dict()創(chuàng)建字典。
雖然索引與其他容器類型一起使用來訪問值,但是字典使用鍵。鍵可以在方括號(hào)內(nèi)或與get()方法一起使用。
使用get()的區(qū)別在于,如果沒有找到密鑰,它將返回None,而不是KeyError。
運(yùn)行該程序時(shí),輸出為:
Jack 26
字典是可變的。我們可以使用賦值運(yùn)算符添加新項(xiàng)目或更改現(xiàn)有項(xiàng)目的值。
如果鍵已經(jīng)存在,則值將更新,否則將新鍵:值對(duì)添加到字典中。
運(yùn)行該程序時(shí),輸出為:
{'name': 'Jack', 'age': 27} {'name': 'Jack', 'age': 27, 'address': 'Downtown'}
我們可以使用pop()方法刪除字典中的特定項(xiàng)目。此方法使用提供的鍵作為項(xiàng)移除,并返回值。
方法popitem()可用于從字典中刪除并返回任意項(xiàng)(鍵,值)。使用clear()方法可以一次刪除所有項(xiàng)目。
我們還可以使用del關(guān)鍵字刪除單個(gè)項(xiàng)目或整個(gè)字典本身。
運(yùn)行該程序時(shí),輸出為:
16 {1: 1, 2: 4, 3: 9, 5: 25} (1, 1) {2: 4, 3: 9, 5: 25} {2: 4, 3: 9} {}
以下列出了詞典可用的方法。在上面的示例中已經(jīng)使用了其中一些。
方法 | 描述 |
---|---|
clear() | 從字典中刪除所有項(xiàng)目。 |
copy() | 返回字典的淺表副本。 |
fromkeys(seq[,v]) | 用于創(chuàng)建一個(gè)新字典,以序列seq中元素做字典的鍵,v為字典所有鍵對(duì)應(yīng)的初始值。 |
get(key[,d]) | 返回鍵的值。 如果key不存在,則返回d(默認(rèn)為None)。 |
items() | 返回可遍歷的(鍵, 值) 元組數(shù)組。 |
keys() | 返回字典中的所有的鍵。 |
pop(key[,d]) | 刪除帶鍵的項(xiàng)并返回其值,如果沒有找到key,則返回d。如果沒有提供d,并且沒有找到key,則引發(fā)KeyError錯(cuò)誤 |
popitem() | 刪除并返回任意項(xiàng)(鍵,值)。如果字典為空則引發(fā)KeyError。 |
setdefault(key[,d]) | 返回指定鍵的值,如果指定鍵的值不在字典中,返回指定值,默認(rèn)為 None。 |
update([other]) | 使用來自other的鍵/值對(duì)更新字典,覆蓋現(xiàn)有鍵。 |
values() | 以列表形式返回字典中的所有值。 |
以下是使用這些方法的一些示例。
marks = {}.fromkeys(['Math','English','Science'], 0) # 輸出: {'English': 0, 'Math': 0, 'Science': 0} print(marks) for item in marks.items(): print(item) # 輸出: ['English', 'Math', 'Science'] list(sorted(marks.keys()))
字典理解是從Python中的迭代器創(chuàng)建新字典的一種優(yōu)雅簡(jiǎn)潔的方法。
字典理解包含一個(gè)表達(dá)式對(duì)(鍵:值),后跟花括號(hào){}中的for語句。
這是制作字典的示例,其中每個(gè)項(xiàng)目都是一對(duì)數(shù)字及其平方。
squares = {x: x*x for x in range(6)} # 輸出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25} print(squares)
此代碼等效于
squares = {} for x in range(6): squares[x] = x*x
可選if語句可以過濾出項(xiàng)以形成新字典。
這是一些僅包含奇數(shù)項(xiàng)目的字典示例。
odd_squares = {x: x*x for x in range(11) if x%2 == 1} # 輸出: {1: 1, 3: 9, 5: 25, 7: 49, 9: 81} print(odd_squares)
要了解更多信息,請(qǐng)?jiān)L問Python字典理解。
我們可以使用關(guān)鍵字來測(cè)試鍵是否在字典中in。請(qǐng)注意,成員資格測(cè)試僅適用于鍵,而不適用于值。
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81} # 輸出: True print(1 in squares) # 輸出: True print(2 not in squares) # 僅對(duì)鍵而不是值進(jìn)行成員資格測(cè)試 # 輸出: False print(49 in squares)
使用for循環(huán),我們可以遍歷字典中的每個(gè)鍵。
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81} for i in squares: print(squares[i])
內(nèi)置函數(shù)如all()、any()、len()、cmp()、sort()等通常與dictionary一起用于執(zhí)行不同的任務(wù)。
功能 | 描述 |
---|---|
all() | 如果字典的所有鍵都為true(或者字典為空),則返回True。 |
any() | 如果字典的任何鍵為true,則返回True。 如果字典為空,則返回False。 |
len() | 返回字典中的長(zhǎng)度(項(xiàng)目數(shù))。 |
cmp() | 比較兩個(gè)字典的項(xiàng)目。 |
sorted() | 返回字典中新排序的鍵列表。 |
以下是一些使用內(nèi)置函數(shù)來處理字典的示例。
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81} # 輸出: 5 print(len(squares)) # 輸出: [1, 3, 5, 7, 9] print(sorted(squares))