用戶: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
以及一些其它操作。其他操作不多贅述。