Python defaultdict方法使用分析
defaultdict底層代碼
在字典中查找某個值時,若key不存在時則會返回一個KeyError錯誤而不是一個默認值,這時候可以使用defaultdict函數(shù)。
注意:使用dict[key]=value時,若key不存在則報錯;使用dict.get(key)時,若key不存在則會返回一個默認值。
defaultdict接受一個工廠函數(shù)作為參數(shù),如下來構造:
dict =defaultdict( factory_function)
factory_function可以是list、set、str等等,作用是當key不存在時,返回的是工廠函數(shù)的默認值,比如list對應[ ],str對應的是空字符串,set對應set( ),int對應0。
defaultdict是python內建dict類的一個字類,功能與dict相同,但它帶有一個默認的值,若key值不存在時返回一個默認的值。
示例代碼:
lst = ['A', 'B', 'C', 'D', 'e'] dic = {} for i in lst: dic[i] += 1 print(dic)
若訪問字典中的key值不存在時會報KeyError錯誤,這時候就可以使用defaultdict類來避免這種錯誤。
dict.setdefault()方法:有兩個參數(shù),第一個是參數(shù),第二個是默認值。
示例代碼:
lst = ['A', 'B', 'C', 'D', 'e'] dic = {} for i in lst: dic.setdefault(i, 0) dic[i] += 1 print(dic)
示例代碼:
from collections import defaultdict dict1 = defaultdict(int) dict2 = defaultdict(set) dict3 = defaultdict(str) dict4 = defaultdict(list) dict4[1] = 666 print(dict1[0]) print(dict2[0]) print(dict3[0]) print(dict4[0]) print(dict4[1])
運行效果:
Python的字典是否有默認值
眾所周知,在Python中如果訪問字典中不存在的鍵,會引發(fā)KeyError異常(JavaScript中如果對象中不存在某個屬性,則返回undefined)。但是有時候,字典中的每個鍵都存在默認值是非常方便的。例如下面的例子:
strings = ('puppy', 'kitten', 'puppy', 'puppy', 'weasel', 'puppy', 'kitten', 'puppy') counts = {} for kw in strings: counts[kw] += 1
該例子統(tǒng)計strings中某個單詞出現(xiàn)的次數(shù),并在counts字典中作記錄。單詞每出現(xiàn)一次,在counts相對應的鍵所存的值數(shù)字加1。但是事實上,運行這段代碼會拋出KeyError異常,出現(xiàn)的時機是每個單詞第一次統(tǒng)計的時候,因為Python的dict中不存在默認值的說法。
為了解決上述問題,我們可以先加個判斷語句,若key不存在,則其value值設為1
strings = ('puppy', 'kitten', 'puppy', 'puppy', 'weasel', 'puppy', 'kitten', 'puppy') counts = {} for kw in strings: if kw not in counts: counts[kw] = 1 else: counts[kw] += 1
同樣也可以利用setdefault的方法來設置默認值:
strings = ('puppy', 'kitten', 'puppy', 'puppy', 'weasel', 'puppy', 'kitten', 'puppy') counts = {} for kw in strings: counts.setdefault(kw, 0) counts[kw] += 1
還有一種方法來對字典進行初始化操作——defaultdict
defaultdict類就好像是一個dict,但是它是使用一個類型來初始化的:
>> from collections import defaultdict >>> d = defaultdict(list) >>> d['k1'] [] >>> d defaultdict(<class 'list'>, {'k1': []}) >>> d['k2']='kobe' >>> d defaultdict(<class 'list'>, {'k1': [], 'k2': 'kobe'}) >>> d['k3'].append('lebron') >>> d defaultdict(<class 'list'>, {'k1': [], 'k2': 'kobe', 'k3': ['lebron']})
到此這篇關于Python defaultdict方法使用分析的文章就介紹到這了,更多相關Python defaultdict內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事項
這篇文章主要介紹了Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事項,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-11-11使用python寫的opencv實時監(jiān)測和解析二維碼和條形碼
這篇文章主要介紹了使用python寫的opencv實時監(jiān)測和解析二維碼和條形碼,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08在Pytorch中使用樣本權重(sample_weight)的正確方法
今天小編就為大家分享一篇在Pytorch中使用樣本權重(sample_weight)的正確方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08python的pytest框架之命令行參數(shù)詳解(上)
這篇文章主要介紹了python的pytest框架之命令行參數(shù)詳解,pytest是一款強大的python自動化測試工具,可以勝任各種類型或者級別的軟件測試工作。pytest提供了豐富的功能,包括assert重寫,第三方插件,需要的朋友可以參考下2019-06-06詳解如何使用Pandas創(chuàng)建有效且可復制的代碼
Pandas作為一種多功能和強大的工具而屹立不倒,其直觀的數(shù)據(jù)結構和廣泛的功能使其成為無數(shù)數(shù)據(jù)專業(yè)人士和愛好者的首選,本文將使用Pandas創(chuàng)建有效且可復制的代碼,感興趣的可以了解下2024-11-11Python實現(xiàn)的查詢mysql數(shù)據(jù)庫并通過郵件發(fā)送信息功能
這篇文章主要介紹了Python實現(xiàn)的查詢mysql數(shù)據(jù)庫并通過郵件發(fā)送信息功能,可實現(xiàn)Python針對mysql的查詢與宕機信息通過郵件發(fā)送的相關操作技巧,需要的朋友可以參考下2018-05-05Python中實現(xiàn) xls 文件轉 xlsx的4種方法(示例詳解)
在 Python 中,可以采用 pandas、pyexcel、win32com 和 xls2xlsx 這四個模塊,實現(xiàn) xls 轉 xlsx 格式,本文以 Excel 示例文件test_Excel.xls 為例結合示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-06-06