用戶:Xyy23330121/Python/字典
a = {"key1": "value1", "key2": "value2"} #创建字典
print(a["key1"]) #输出:value1
b = {} #创建空字典
以上示例是一個簡單的、使用字典的方法。通過輸入正確的鍵,我們可以從字典得到該鍵對應的值。
幾乎所有變量都可以作為字典的鍵,但可變類型(列表、字典等)不可作為字典的鍵。
比較運算結果相等的值,比如整數1、浮點數1.0和布爾值True,可以被互換使用,並索引到同一個值。
類似列表,字典也有推導式。我們看以下示例:
a = {x: x ** 2 for x in range(10) if x not in range(:10:2)}
print(a[5]) #输出:25
b = {x: x ** 3 for x in range(10)}
print(b[5]) #输出:125
使用 zip 函數[1],我們可以同時迭代多個可迭代對象。迭代次數按可迭代次數最少的對象來指定。比如:
print(list(zip("Python","012"))) #输出:[('P', '0'), ('y', '1'), ('t', '2')]
於是,我們可以利用該函數配合生成器高效地創建字典,比如:
a = {x: y*3 for x,y in zip(range(10),"Python")}
print(a[5]) #输出:nnn
除 zip 函數之外,Python 內置的 itertools 模塊實現了更多高級的可迭代對象作為循環迭代的工具。讀者可以查閱對應的 Python 模塊文檔進行補充。
我們也可以用 dict 函數來創建字典。比如:
a = dict(one=1, two=2, three=3)
b = dict([("one",1),("two",2),["three",3]])
c = dict((("one",1),["three",3]), two = 2)
print(a==b==c) #输出:True
d = dict() #创建空字典
由長度為 2 的列表或元組構成的列表或元組可以直接轉化為字典。同時,也可以用類似傳入參數的方式生成字典。
要注意,以下的方式是不合法的:
dict(0 = 1) #报错:SyntaxError
對於不符合變量命名規則的鍵(比如「數字」或「字符串以數字開頭」的鍵),就不能用這種方法。
該方法有兩個參數:
- iterable:由可以作為字典鍵的元素構成的可迭代對象
- value:(可選)這些鍵對應的值,默認為
None
我們看以下示例:
a = dict.fromkeys("Python",3)
print(a)
#输出:{'P': 3, 'y': 3, 't': 3, 'h': 3, 'o': 3, 'n': 3}
字典是可迭代序列。當對它進行迭代時,等同於對它的「鍵」進行迭代。迭代順序則是按「鍵」被輸入的順序進行。
我們可以通過 list 或 tuple 函數確認這一點。
a = dict.fromkeys("Python",3) #按顺序输入了键 "P" "y" "t" "h" "o" "n"
print(list(a))
類似其它可迭代序列,len 函數會返回字典的項數。而 in 或 not in 則會判斷「鍵」在/不在字典中。
對於創建的一個字典對象 d = {0 : "zero"},可以使用 d[0] 來讀取 d 中對應鍵0 的值。但如果字典中沒有鍵 0 則會報錯。
此方法僅適用於程式設計師已經明確了解,所使用的索引是字典的鍵的時候。如果程式設計師不知道,則可以參照以下dict.get方法。
我們看以下示例:
d = {0 : "zero"}
print(d.get(0)) #输出:zero
print(d.get(1)) #输出:None
print(d.get(1,"one")) #输出:one
default 參數的默認值是 None 。如果參數 key 是字典 d 中的鍵,則 d.get(key) 會返回 d[key] 的值。反之,會返回 default 參數的值。
我們看以下示例:
d = {0 : "zero"}
d[0] = "Zero" #将 d 中对应键 0 的值更新为 "Zero"。
print(d) #输出:{0: 'Zero'}
d[1] = "One" #在 d 中创建新键 1,使其值为 "One"。
print(d) #输出:{0: 'Zero', 1: 'One'}
這種方式無論鍵是否已經存在,都會對字典進行修改。
我們看以下示例:
d = {0 : "zero"}
dict.setdefault(0, "Zero") #查找 d 中是否已有键 0,由于已有键 0,这里不操作。
print(d) #输出:{0: 'zero'}
dict.setdefault(1, "One") #查找 d 中是否已有键 1,由于没有键 1,这里创建新键 1,使其值为 "One"。
print(d) #输出:{0: 'zero', 1: 'One'}
這種方式只有在鍵不存在時,才會進行修改。
del d[key] 會刪除字典 d 中,對應鍵 key 的項目。如果沒有符合鍵 key 的項目,則會報錯 KeyError。
使用 d.pop 時。如果 key 存在於字典 d 中,則將其移除並返回其值;
如果 key 不在 d 中,則返回 default 的值。此時,如果 default 未給出,則會報錯 KeyError。
d.popitem 會以「後進先出」的原則,刪除字典 d 中最後一個鍵及其對應的值,並返回其值。如果 d 是空字典,則會報錯。
字典同時也是可變序列。與可變序列「列表」相同,如果使用以下方法:
a = {0: None, 1: True}
b = a
b[0] = False
print(a) #输出:{0: False, 1: True}
在更改 b 的時候,會導致 a 的值也發生改變。這是因為 b 和 a 本質上是同一個對象。
字典支持可變序列的這兩個操作:
dict.clear():對於已有的字典d,d.clear()會清除d中的一切鍵值對,使其變成一個空字典。dict.copy():對於已有的字典d,d.copy()會返回d的一個複製。
這兩個方法都會取 other 的值來更新 dict 的值。其結果等同於:
for key in other:
dict[key] = other[key]
other 一般是一個字典,但也可以是任何「可以用dict函數轉化為字典的」對象。
對於 dict.update 的情況,還可以使用這種方式:
dict.update(key = value)
返回一個「相當於 dict 用 other 更新後的字典」的新字典。而 dict 不會被更改。
Python 提供了以下三種方法:
- dict.items():返回所有鍵值對元組
(键, 值)構成的視圖 - dict.keys():返回所有鍵構成的視圖
- dict.values():返回所有值構成的視圖
字典的視圖簡單來講就是隨着字典更新而更新的可迭代序列。視圖支持 len 函數、比較運算 in 和 not in 以及一些其它操作。其他操作不多贅述。