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