Python 之字典常用方法
前言
前面文章講到了列表和字符串的常用方法,有些方法看似非常簡單,但是真正到用的時候還是會出問題,今天來總結一些字典的常用方法。
1.clear
方法 clear 刪除所有的字典項,這種方法是就地執行,沒有返回值。
示例如下:
這個方法有什么用呢,接著來看兩個場景:
>>> a = {} >>> b = a >>> a['name'] = 'jack' >>> a {'name': 'jack'} >>> b {'name': 'jack'} >>> a = {} >>> b {'name': 'jack'}另一個場景:
>>> a = {} >>> b = a >>> a['name'] = 'jack' >>> b {'name': 'jack'} >>> a.clear() >>> b {}這兩個場景中,a 和 b 都指向同一個字典,在第一個場景中,通過將一個空字典賦值給 a 來清空,這對 b 沒有任何影響,它依然指向原來的字典,但要刪除原來字典中的所有元素,必須用 clear 方法。
2. copy
方法 copy 返回一個新字典。其鍵值對和原來的字典相同,這個方法執行的是淺復制,因為值本身是原件,而非副本。
來看看示例:
上面試執行替換操作。
>>> a = {'name':'jack','age':12} >>> b = a.copy() >>> b['addr'] = 'china' >>> a {'name': 'jack', 'age': 12} >>> b {'name': 'mark', 'age': 12, 'addr': 'china'}上面是執行新增操作。
>>> a = {'name':['jack'],'age':12} >>> b = a.copy() >>> b['name'].append('xxx') >>> a {'name': ['jack', 'xxx'], 'age': 12} >>> b {'name': ['jack', 'xxx'], 'age': 12}這里是執行新增操作。
通過上三個示例可以看出,當替換和新增副本中的值時,原件不受影響,然后,如果修改副本中的值(就地修改而不是替換),原件也將會發生變化,因為原件指向的也是被修改的值。
為避免這種問題,一種辦法是執行深復制,即同時復制值及其包含的所有值。可使用模塊 copy 中的函數 deepcopy
>>> from copy import deepcopy >>> a = {'name':['jack'],'age':12} >>> b = deepcopy(a) >>> c = a.copy() >>> a['name'].append('mark') >>> a {'name': ['jack', 'mark'], 'age': 12} >>> b {'name': ['jack'], 'age': 12} >>> c {'name': ['jack', 'mark'], 'age': 12}3.fromkeys
方法 fromkeys 創建一個新字典,其中包含指定的鍵,且每個鍵對應的值都是 None
示例:
如果不想使用默認值 None,可提供特定的值,如上面的’(Unknow)’
4.get
get 為訪問字典提供了寬松的環境,通常,如果訪問字典中沒有的項將會引發錯誤,這時候就可以用 get 方法了,get 在訪問不存在的鍵時,沒有引發異常,而是返回None,還可以指定默認值。
>>> a = {} >>> a["name"] Traceback (most recent call last):File "<stdin>", line 1, in <module> KeyError: 'name'使用 get 就可以避免這些問題。
>>> a = {} >>> a.get("name") >>> print(a.get("name")) None >>> print(a.get("name",'jack')) jack如果字典中包含健值,get 的作用與普通字段查找相同。
所以建議在訪問字典的時候,盡可能的用 get 方法,減少不必要的錯誤。
5.items
items 返回一個包含所有字典項的列表,其中每個元素都是(key,value)的形式,字典項在列表中的排列順序不確定。
>>> a = {'name':'jack','age':12,'addr':'china'} >>> a.items() dict_items([('name', 'jack'), ('age', 12), ('addr', 'china')])返回值屬于一種名為字典視圖的特殊類型,字典視圖可以用于迭代,另外還可以確定其長度以及對其執行成員資格檢查,如下:
>>> a = {'name':'jack','age':12,'addr':'china'} >>> it = a.items() >>> len(it) 3 >>> ('name','jack') in it True視圖的一個優點是不復制,它始終是底層字典的反映,即便是修改了底層字典亦是如此。
上面這段話可能不太好理解,來看個示例:
上面示例中,當字典 a 中的值已經修改過后,這時候無需再次給 it賦值,直接輸出就是最新的結果。這是字典視圖的一個優點,它不是簡單的復制,而是始終是底層字典的反映。
如果要將字典視圖復制到列表中,可以這樣:
>>> lst = list(a.items()) >>> lst [('name', 'jack'), ('age', 12), ('addr', 'china')]6.keys
方法 keys 返回一個字典視圖,其中包含字典的所有鍵。
>>> a = {'name': 'jack', 'age': 12, 'addr': 'china'} >>> a.keys() dict_keys(['name', 'age', 'addr'])7.pop
方法 pop 可用于獲取與指定鍵相關聯的值,并將該鍵值從字典中刪除。
>>> a = {'name': 'jack', 'age': 12, 'addr': 'china'} >>> a.pop('age') 12 >>> a {'name': 'jack', 'addr': 'china'}8.popitem
方法 popitem 類似于 list.pop,但是 list.pop彈出來的是最后一個值,而字典的 popitem 彈出來的是隨機字典項,因為字典的順序是不確定的。
>>> a {'name': 'jack', 'addr': 'china'} >>> a.popitem() ('addr', 'china') >>> a {'name': 'jack'}9.setdefault
方法 setdefault 有點像 get,因為它獲取與指定鍵相關聯的值,但除此之外,setdefault 還在字典不包含指定的鍵時,在字典中添加指定的鍵值對。
>>> a = {} >>> a.setdefault('name','jack') 'jack' >>> a {'name': 'jack'}這和 get 不太一樣,如果字典不包含指定的鍵,就會自動在字典中添加指定的鍵值對。
如果字典中已經存在了鍵值對,那么保持字典不變。
10.update
update 使用一個字典中的項來更新另一個字典。
>>> a = {'name':'jack','age':12} >>> b = {'name':'mark'} >>> c = {'addr':'china'} >>> a.update(b) >>> a {'name': 'mark', 'age': 12} >>> a.update(c) >>> a {'name': 'mark', 'age': 12, 'addr': 'china'}11.values
方法 values返回一個有字典中的值組成的字典視圖,不同于方法 keys,values 返回的視圖可能包含重復的值。
>>> a {'name': 'mark', 'age': 12, 'addr': 'china'} >>> a.values() dict_values(['mark', 12, 'china'])總結
以上是生活随笔為你收集整理的Python 之字典常用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 之字符串常用方法
- 下一篇: Python之函数的收集参数和分配参数用