Python?defaultdict教程示例詳解
1. 概述
在我們使用Python中的dict時(shí),常常需要判斷某個(gè)關(guān)鍵字是否已經(jīng)在dict中,如果不存在則初始化,存在則進(jìn)行另外的操作。例如統(tǒng)計(jì)一篇文章中所有單詞出現(xiàn)次數(shù)的代碼,大致寫法如下:
words_num = {}
for word in words:
if word not in words_num.keys():
words_num[word] = 1
else:
words_num[word] += 1
這樣寫總是需要判斷key是否在dict中,不是很優(yōu)雅。
Python標(biāo)準(zhǔn)庫collections中defaultdict類可以很好的解決這個(gè)問題。這個(gè)類使用與dict幾乎一樣,除了可以在初始化時(shí)設(shè)置key的默認(rèn)類型和數(shù)值。類的聲明格式為defaultdict(default_factory=None, /[, ...]),default_factory是一個(gè)Callable類型的變量。
例如,foo = defaultdict(int)表示foo中的key的默認(rèn)類型是int,且默認(rèn)值為int的默認(rèn)值0,我們可以獲取任意的key,不需要手動(dòng)初始化key:
>>> from collections import defaultdict >>> foo = defaultdict(int) >>> foo['a'] 0 >>> foo['b'] 0 >>> foo['whatever'] 0 >>> foo['a'] += 1 >>> foo['a'] 1
所以最開始的例子可以簡化為如下:
from collections import defaultdict
words_num = defaultdict(int)
for word in words:
words_num[word] += 1
可以看到使用defaultdict后,代碼中只需要關(guān)注上層邏輯(統(tǒng)計(jì)單詞的出現(xiàn)次數(shù)),而不需要關(guān)注具體的語法的代碼實(shí)現(xiàn)(dict是否存在某個(gè)key,沒有的話xxx,有的話xxx),因此世界變得更美好了一些。
除了int外,用list,tuple,dict,set等作為變量也比較常見。除了內(nèi)置類型外,還可以自定義函數(shù),比如設(shè)置key的默認(rèn)值為'China':
>>> from collections import defaultdict
>>> def set_default_contry():
... return "China"
...
>>> person_from = defaultdict(set_default_contry)
>>> person_from['張三']
'China'
>>> person_from['李四']
'China'
>>> person_from['Tim'] = 'USA'
>>> person_from
defaultdict(<function set_default_contry at 0x10896eca0>, {'a': 'China', '張三': 'China', '李四': 'China', 'Tim': 'USA'})
defauldict是一個(gè)簡單但很好用的功能,在日常的使用中還是能減少一些代碼復(fù)雜度的。希望這篇小文能給讓你寫代碼更容易,更開心。
以上就是Python defaultdict教程示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python defaultdict教程的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python操作mongodb數(shù)據(jù)庫的方法詳解
這篇文章主要介紹了Python操作mongodb數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python下載、安裝pymongo及操作MongoDB數(shù)據(jù)庫相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-12-12
pyside6-uic生成py代碼中文為unicode(亂碼)的問題解決方案
這篇文章主要介紹了如何解決pyside6-uic生成py代碼中文為unicode(亂碼)的問題,文中通過代碼和圖文介紹的非常詳細(xì),對大家解決問題有一定的幫助,需要的朋友可以參考下2024-02-02
基于OpenCV和Gradio實(shí)現(xiàn)簡單的人臉識別詳解
這篇文章主要為大家詳細(xì)介紹了如何基于OpenCV和Gradio實(shí)現(xiàn)簡單的人臉識別功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-04-04
python矩陣運(yùn)算,轉(zhuǎn)置,逆運(yùn)算,共軛矩陣實(shí)例
這篇文章主要介紹了python矩陣運(yùn)算,轉(zhuǎn)置,逆運(yùn)算,共軛矩陣實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python實(shí)現(xiàn)對excel中需要的數(shù)據(jù)的單元格填充顏色
這篇文章主要介紹了python實(shí)現(xiàn)對excel中需要的數(shù)據(jù)的單元格填充顏色,文章圍繞主題展開詳細(xì)單元格填充介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06

