天天看點

Python中defaultdict函數的使用方法

Python的字典是否有預設值?

衆所周知,在Python中如果通路字典中不存在的鍵,會引發KeyError異常(JavaScript中如果對象中不存在某個屬性,則傳回undefined)。但是有時候,字典中的每個鍵都存在預設值是非常友善的。例如下面的例子:

strings = ('puppy', 'kitten', 'puppy', 'puppy', 'weasel', 'puppy', 'kitten', 'puppy') counts = {} 
for kw in strings: 
    counts[kw] += 1
           

該例子統計strings中某個單詞出現的次數,并在counts字典中作記錄。單詞每出現一次,在counts相對應的鍵所存的值數字加1。但是事實上,運作這段代碼會抛出KeyError異常,出現的時機是每個單詞第一次統計的時候,因為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的方法來設定預設值:

'''
學習中遇到問題沒人解答?小編建立了一個Python學習交流QQ群:531509025
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!
'''
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有幫助!

Python基礎入門教程推薦:更多Python視訊教程-關注B站:Python學習者

【Python教程】全網最容易聽懂的1000集python系統學習教程(答疑在最後四期,滿滿幹貨)

Python爬蟲案例教程推薦:更多Python視訊教程-關注B站:Python學習者