我們知道,,字典的數(shù)據(jù)類型為 dict,我們可使用 dir(dict) 來查看該類包含哪些方法,。在交互式解釋器中輸入 dir(dict) 命令,,將看到如下輸出結(jié)果:
>>> dir(dict)
['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
這些方法中,clear(),、fromkeys(),、get() 方法的功能和用法已經(jīng)在前面章節(jié)中講過,這里不再重復(fù)介紹,。下面給大家一一介紹另外的這些方法,。
Python keys()、values() 和 items()方法
這 3 個方法之所以放在一起介紹,,是因為它們都用來獲取字典中的特定數(shù)據(jù),。keys() 方法用于返回字典中的所有鍵,;values() 方法用于返回字典中所有鍵對應(yīng)的值;items() 用于返回字典中所有的鍵值對,。
例如:
- a = {'數(shù)學(xué)': 95, '語文': 89, '英語': 90}
- print(a.keys())
- print(a.values())
- print(a.items())
運行結(jié)果為:
dict_keys(['數(shù)學(xué)', '語文', '英語'])
dict_values([95, 89, 90])
dict_items([('數(shù)學(xué)', 95), ('語文', 89), ('英語', 90)])
注意,,在 Python 2.x 中,這三個方法的返回值是列表類型,。但在 Python 3 中,,并不是我們常見的列表和元組類型,因為 Python 3不希望用戶直接操作這幾個方法的返回值,。如果想使用返回的數(shù)據(jù),,有以下 2 種方法:
-
使用 list() 函數(shù),將它們返回的數(shù)據(jù)轉(zhuǎn)換成列表,,例如:
- a = {'數(shù)學(xué)': 95, '語文': 89, '英語': 90}
- b = list(a.keys())
- print(b)
運行結(jié)果為:
['數(shù)學(xué)', '語文', '英語']
-
也可以利用多重賦值的技巧,,利用循環(huán)結(jié)構(gòu)將鍵或值分別賦給不同的變量,比如說:
- a = {'數(shù)學(xué)': 95, '語文': 89, '英語': 90}
- 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)
運行結(jié)果為:
數(shù)學(xué) 語文 英語
---------------
95 89 90
---------------
key: 數(shù)學(xué) value: 95
key: 語文 value: 89
key: 英語 value: 90
由于目前尚未學(xué)習 for 循環(huán),,初學(xué)者可先跳過此種方法,,等學(xué)會 for 循環(huán)后再回過頭來學(xué)習。
Python copy()方法
copy() 方法用于返回一個具有相同鍵值對的新字典,,例如:
- a = {'one': 1, 'two': 2, 'three': [1,2,3]}
- b = a.copy()
- print(b)
運行結(jié)果為:
{'one': 1, 'two': 2, 'three': [1, 2, 3]}
可以看到,,通過 copy() 方法,就可以將字典 a 的數(shù)據(jù)拷貝給字典 b,。
注意,,copy() 方法所遵循的拷貝原理,既有深拷貝,,也有淺拷貝,。拿拷貝字典 a 為例,copy() 方法只會對最表層的鍵值對進行深拷貝,,也就是說,,它會再申請一塊內(nèi)存用來存放 {'one': 1, 'two': 2, 'three': []};而對于某些列表類型的值來說,,此方法對其做的是淺拷貝,,也就是說,b 中的 [1,2,3] 的值不是自己獨有,,而是和 a 共有,。
例如:
- a = {'one': 1, 'two': 2, 'three': [1,2,3]}
- b = a.copy()
- #向 a 中添加新鍵值對,由于b已經(jīng)提前將 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)
運行結(jié)果為:
{'one': 1, 'two': 2, 'three': [1, 2, 3], 'four': 100}
{'one': 1, 'two': 2, 'three': [1, 2, 3]}
{'one': 1, 'two': 2, 'three': [2, 3], 'four': 100}
{'one': 1, 'two': 2, 'three': [2, 3]}
從運行結(jié)果不難看出,對 a 增加新鍵值對,,b 不變,;而修改 a 某鍵值對中列表內(nèi)的元素,b也會相應(yīng)改變,。
Python update()方法
update() 方法可使用一個字典所包含的鍵值對來更新己有的字典,。
在執(zhí)行 update() 方法時,如果被更新的字典中己包含對應(yīng)的鍵值對,,那么原 value 會被覆蓋,;如果被更新的字典中不包含對應(yīng)的鍵值對,則該鍵值對被添加進去,。
例如:
- a = {'one': 1, 'two': 2, 'three': 3}
- a.update({'one':4.5, 'four': 9.3})
- print(a)
運行結(jié)果為:
{'one': 4.5, 'two': 2, 'three': 3, 'four': 9.3}
從上面的執(zhí)行過程可以看出,,由于被更新的 dict 中已包含 key 為“one”的鍵值對,因此更新時該鍵值對的 value 將被改寫,;但如果被更新的 dict 中不包含 key 為“four”的鍵值對,,那么更新時就會為原字典增加一個鍵值對。
Python pop方法
pop() 方法用于獲取指定 key 對應(yīng)的 value,,并刪除這個鍵值對,。
如下方法示范了 pop() 方法的用法:
- a = {'one': 1, 'two': 2, 'three': 3}
- print(a.pop('one'))
- print(a)
運行結(jié)果為:
1
{'two': 2, 'three': 3}
此程序中,第 2 行代碼將會獲取“one”對應(yīng)的值 1,,并刪除該鍵值對,。
Python popitem()方法
popitem() 方法用于隨機彈出字典中的一個鍵值對。
注意,,此處的隨機其實是假的,,它和 list.pop() 方法一樣,也是彈出字典中最后一個鍵值對,。但由于字典存儲鍵值對的順序是不可知的,,因此 popitem() 方法總是彈出底層存儲的最后一個鍵值對。
如下代碼示范了 popitem() 方法的用法:
- a = {'one': 1, 'two': 2, 'three': 3}
- print(a)
- # 彈出字典底層存儲的最后一個鍵值對
- print(a.popitem())
- print(a)
運行結(jié)果為:
{'one': 1, 'two': 2, 'three': 3}
('three', 3)
{'one': 1, 'two': 2}
實際上,,由于 popitem 彈出的是一個元組,,因此我們也可以通過序列解包的方式,用兩個變量分別接收 key 和 value,。
例如如下代碼:
- a = {'one': 1, 'two': 2, 'three': 3}
- # 將彈出項的key賦值給k、value賦值給v
- k, v = a.popitem()
- print(k, v)
運行結(jié)果為:
three 3
Python setdefault()方法
setdefault() 方法也用于根據(jù) key 來獲取對應(yīng) value 的值,。但該方法有一個額外的功能,,即當程序要獲取的 key 在字典中不存在時,該方法會先為這個不存在的 key 設(shè)置一個默認的 value,,然后再返回該 key 對應(yīng)的 value,。
也就是說,,setdefault() 方法總能返回指定 key 對應(yīng)的 value;如果該鍵值對存在,,則直接返回該 key 對應(yīng)的 value,;如果該鍵值對不存在,則先為該 key 設(shè)置默認的 value,,然后再返回該 key 對應(yīng)的 value,。
如下代碼示范了 setdefault() 方法的用法:
- a = {'one': 1, 'two': 2, 'three': 3}
- # 設(shè)置默認值,該key在dict中不存在,,新增鍵值對
- print(a.setdefault('four', 9.2))
- print(a)
- # 設(shè)置默認值,,該key在dict中存在,不會修改dict內(nèi)容
- print(a.setdefault('one', 3.4))
- print(a)
運行結(jié)果為:
9.2
{'one': 1, 'two': 2, 'three': 3, 'four': 9.2}
1
{'one': 1, 'two': 2, 'three': 3, 'four': 9.2}
|