咱們知道,字典的數據類型爲 dict,咱們可以使用 dir(dict)
來查看該類包含哪些方法。在交互式解釋器中輸入 dir(dict)
命令,將看到以下輸出結果:python
dir(dict) ['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
這些方法中,clear()、fromkeys()、get() 方法的功能和用法已經在前面章節中講過,這裏再也不重複介紹。下面給你們一一介紹另外的這些方法。函數
這 3 個方法之因此放在一塊兒介紹,是由於它們都用來獲取字典中的特定數據。keys() 方法用於返回字典中的全部鍵;values() 方法用於返回字典中全部鍵對應的值;items() 用於返回字典中全部的鍵值對。
例如:spa
a = {'數學': 95, '語文': 89, '英語': 90} print(a.keys()) print(a.values()) print(a.items())
運行結果爲:code
dict_keys(['數學', '語文', '英語']) dict_values([95, 89, 90]) dict_items([('數學', 95), ('語文', 89), ('英語', 90)])
注意,在 Python 2.x 中,這三個方法的返回值是列表類型。但在 Python 3 中,並非咱們常見的列表和元組類型,由於 Python 3不但願用戶直接操做這幾個方法的返回值。若是想使用返回的數據,有如下 2 種方法:three
使用 list() 函數,將它們返回的數據轉換成列表,例如:內存
a = {'數學': 95, '語文': 89, '英語': 90} b = list(a.keys()) print(b)
輸出結果:rem
['數學', '語文', '英語']
也能夠利用多重賦值的技巧,利用循環結構將鍵或值分別賦給不一樣的變量,好比說:get
a = {'數學': 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)
運行結果爲:數學
數學 語文 英語 --------------- 95 89 90 --------------- key: 數學 value: 95 key: 語文 value: 89 key: 英語 value: 90
copy() 方法用於返回一個具備相同鍵值對的新字典,例如:it
a = {'one': 1, 'two': 2, 'three': [1,2,3]} b = a.copy() print(b)
運行結果爲:
{'one': 1, 'two': 2, 'three': [1, 2, 3]}
能夠看到,經過 copy() 方法,就能夠將字典 a 的數據拷貝給字典 b。
注意,copy() 方法所遵循的拷貝原理,既有深拷貝,也有淺拷貝。拿拷貝字典 a 爲例,copy() 方法只會對最表層的鍵值對進行深拷貝,也就是說,它會再申請一塊內存用來存放 {'one': 1, 'two': 2, 'three': []};而對於某些列表類型的值來講,此方法對其作的是淺拷貝,也就是說,b 中的 [1,2,3] 的值不是本身獨有,而是和 a 共有。
例如:
a = {'one': 1, 'two': 2, 'three': [1,2,3]} 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)
運行結果爲:
{'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]}
從運行結果不難看出,對 a 增長新鍵值對,b 不變;而修改 a 某鍵值對中列表內的元素,b也會相應改變。
update() 方法可以使用一個字典所包含的鍵值對來更新己有的字典,相似修改,可是一次能夠對多個鍵鍵值對進行修改。
在執行 update() 方法時,若是被更新的字典中己包含對應的鍵值對,那麼原 value 會被覆蓋;若是被更新的字典中不包含對應的鍵值對,則該鍵值對被添加進去。
例如:
a = {'one': 1, 'two': 2, 'three': 3} a.update({'one':4.5, 'four': 9.3}) print(a)
運行結果爲:
{'one': 4.5, 'two': 2, 'three': 3, 'four': 9.3}
從上面的執行過程能夠看出,因爲被更新的 dict 中已包含 key 爲「one」的鍵值對,所以更新時該鍵值對的 value 將被改寫;但若是被更新的 dict 中不包含 key 爲「four」的鍵值對,那麼更新時就會爲原字典增長一個鍵值對。
pop() 方法用於獲取指定 key 對應的 value,並刪除這個鍵值對。
以下方法示範了 pop() 方法的用法:
a = {'one': 1, 'two': 2, 'three': 3} print(a.pop('one')) print(a)
運行結果爲:
1 {'two': 2, 'three': 3}
此程序中,第 2 行代碼將會獲取「one」對應的值 1,並刪除該鍵值對。
popitem() 方法用於隨機彈出字典中的一個鍵值對。
注意,此處的隨機實際上是假的,它和 list.pop() 方法同樣,也是彈出字典中最後一個鍵值對。但因爲字典存儲鍵值對的順序是不可知的,所以 popitem() 方法老是彈出底層存儲的最後一個鍵值對。
以下代碼示範了 popitem() 方法的用法:
a = {'one': 1, 'two': 2, 'three': 3} print(a) # 彈出字典底層存儲的最後一個鍵值對 print(a.popitem()) print(a)
運行結果爲:
{'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)
運行結果爲:
three 3
setdefault() 方法也用於根據 key 來獲取對應 value 的值。但該方法有一個額外的功能,即當程序要獲取的 key 在字典中不存在時,該方法會先爲這個不存在的 key 設置一個默認的 value,而後再返回該 key 對應的 value。
也就是說,setdefault() 方法總能返回指定 key 對應的 value;若是該鍵值對存在,則直接返回該 key 對應的 value;若是該鍵值對不存在,則先爲該 key 設置默認的 value,而後再返回該 key 對應的 value。
以下代碼示範了 setdefault() 方法的用法:
a = {'one': 1, 'two': 2, 'three': 3} # 設置默認值,該key在dict中不存在,新增鍵值對 print(a.setdefault('four', 9.2)) print(a) # 設置默認值,該key在dict中存在,不會修改dict內容 print(a.setdefault('one', 3.4)) print(a)
運行結果爲:
9.2 {'one': 1, 'two': 2, 'three': 3, 'four': 9.2} 1 {'one': 1, 'two': 2, 'three': 3, 'four': 9.2}