我們知道,字典的資料型別為 dict,我們可使用dir(dict)
來檢視該類包含哪些方法。在互動式直譯器中輸入dir(dict)
命令,將看到如下輸出結果:
>>> dir(dict)
['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
這 3 個方法之所以放在一起介紹,是因為它們都用來獲取字典中的特定資料。keys() 方法用於返回字典中的所有鍵;values() 方法用於返回字典中所有鍵對應的值;items() 用於返回字典中所有的鍵值對。
例如:
a =
print(a.keys())
print(a.values())
print(a.items())
執行結果為:
dict_keys(['數學', '語文', '英語'])
dict_values([95, 89, 90])
dict_items([('數學', 95), ('語文', 89), ('英語', 90)])
注意,在 python 2.x 中,這三個方法的返回值是列表型別。但在 python 3 中,並不是我們常見的列表和元組型別,因為 python 3不希望使用者直接操作這幾個方法的返回值。如果想使用返回的資料,有以下 2 種方法:
使用 list() 函式,將它們返回的資料轉換成列表,例如:
a =
b = list(a.keys())
print(b)
執行結果為:
['數學', '語文', '英語']
2.也可以利用多重賦值的技巧,利用迴圈結構將鍵或值分別賦給不同的變數,比如說:
a =
for k in a.keys():
print(k,end=' ')
print("\n---------------")
for v in a.values():
print(v,end=' ')
print("\n---------------")
for k,v in a.items():
print("key:",k," value:",v)
執行結果為:
數學 語文 英語
---------------
95 89 90
---------------
key: 數學 value: 95
key: 語文 value: 89
key: 英語 value: 90
copy() 方法用於返回乙個具有相同鍵值對的新字典,例如:
a =
b = a.copy()
print(b)
執行結果為:
可以看到,通過 copy() 方法,就可以將字典 a 的資料拷貝給字典 b。
注意,copy() 方法所遵循的拷貝原理,既有深拷貝,也有淺拷貝。拿拷貝字典 a 為例,copy() 方法只會對最表層的鍵值對進行深拷貝,也就是說,它會再申請一塊記憶體用來存放 ;而對於某些列表型別的值來說,此方法對其做的是淺拷貝,也就是說,b 中的 [1,2,3] 的值不是自己獨有,而是和 a 共有。
例如:
a =
b = a.copy()
#向 a 中新增新鍵值對,由於b已經提前將 a 所有鍵值對都深拷貝過來,因此 a 新增新鍵值對,不會影響 b。
a['four']=100
print(a)
print(b)
#由於 b 和 a 共享[1,2,3](淺拷貝),因此移除 a 中列表中的元素,也會影響 b。
a['three'].remove(1)
print(a)
print(b)
執行結果為:
從執行結果不難看出,對 a 增加新鍵值對,b 不變;而修改 a 某鍵值對中列表內的元素,b也會相應改變。
update() 方法可使用乙個字典所包含的鍵值對來更新己有的字典。
在執行 update() 方法時,如果被更新的字典中己包含對應的鍵值對,那麼原 value 會被覆蓋;如果被更新的字典中不包含對應的鍵值對,則該鍵值對被新增進去。
例如:
a =
a.update()
print(a)
執行結果為:
從上面的執行過程可以看出,由於被更新的 dict 中已包含 key 為「one」的鍵值對,因此更新時該鍵值對的 value 將被改寫;但如果被更新的 dict 中不包含 key 為「four」的鍵值對,那麼更新時就會為原字典增加乙個鍵值對。
pop() 方法用於獲取指定 key 對應的 value,並刪除這個鍵值對。
如下方法示範了 pop() 方法的用法:
a =
print(a.pop('one'))
print(a)
執行結果為:
1
此程式中,第 2 行**將會獲取「one」對應的值 1,並刪除該鍵值對。
popitem() 方法用於隨機彈出字典中的乙個鍵值對。
注意,此處的隨機其實是假的,它和 list.pop() 方法一樣,也是彈出字典中最後乙個鍵值對。但由於字典儲存鍵值對的順序是不可知的,因此 popitem() 方法總是彈出底層儲存的最後乙個鍵值對。
如下**示範了 popitem() 方法的用法
a =
print(a)
# 彈出字典底層儲存的最後乙個鍵值對
print(a.popitem())
print(a)
執行結果為:
('three', 3)
實際上,由於 popitem 彈出的是乙個元組,因此我們也可以通過序列解包的方式,用兩個變數分別接收 key 和 value。
例如如下**:
a =
# 將彈出項的key賦值給k、value賦值給v
k, v = a.popitem()
print(k, v)
執行結果為:
three 3
setdefault() 方法也用於根據 key 來獲取對應 value 的值。但該方法有乙個額外的功能,即當程式要獲取的 key 在字典中不存在時,該方法會先為這個不存在的 key 設定乙個預設的 value,然後再返回該 key 對應的 value。
也就是說,setdefault() 方法總能返回指定 key 對應的 value;如果該鍵值對存在,則直接返回該 key 對應的 value;如果該鍵值對不存在,則先為該 key 設定預設的 value,然後再返回該 key 對應的 value。
如下**示範了 setdefault() 方法的用法:
a =
# 設定預設值,該key在dict中不存在,新增鍵值對
print(a.setdefault('four', 9.2))
print(a)
# 設定預設值,該key在dict中存在,不會修改dict內容
print(a.setdefault('one', 3.4))
print(a)
執行結果為:
9.2
1
python dict 字典 操作
名稱 唯一性資料型別 可變性key 鍵 唯一 數字 字串 元組 不可value 值 不唯一 任意可變 dict assert dict 通過指定key值訪問對應的value dict assert dict say hello assert dict 20 hi 60 不存在時 報keyerror ...
Python dict 字典 詳細總結
d d.has key name 如果有key返回true d.get name 如果沒有key返回none 賦值可以是字元,數字,列表,元組,字典。d age 28 d friends john megan alex del d name 刪除指定key d.clear 清空字典d name 如果...
Python dict 字典 詳細總結
d d.has key name 如果有key返回true d.get name 如果沒有key返回none 賦值可以是字元,數字,列表,元組,字典。d age 28 d friends john megan alex del d name 刪除指定key d.clear 清空字典d name 如果...