天天看點

defaultdict python_defaultdict---不會引發KeyError的字典

defaultdict---不會引發KeyError的字典

1. KeyError異常

使用python标準子產品提供的字典時,如果所用的key不存在, 就會引發KeyError異常, 但使用collections 子產品提供的defaultdict就可以避免這種錯誤

dic = {}

print(dic['python'])

異常内容為

print(dic['python'])

KeyError: 'python'

2. defaultdict 一般用法

defaultdict是字典的子類,它的特殊在于永遠不會引發KeyError 異常,下面的代碼是一段示例代碼

from collections import defaultdict

dic = defaultdict(int)

print(dic['python'])

在建立這種字典時,必須傳入一個工廠函數,比如int, float, list, set。defaultdict内部有一個__missing__(key) 方法,當key不存在時,defaultdict會調用__missing__ 方法根據你所傳入的工廠函數傳回一個預設值。你傳入的工廠函數是int,那麼傳回的就是0, 如果傳入的是list,傳回的就是空清單。

3. defaultdict應用

既然不會引發KeyError,而且還能擷取預設值,那麼就可以利用這兩個特點來簡化一些算法

lst = [1, 3, 4, 2, 1, 3, 5]

現在請寫代碼統計清單裡各個值出現的次數,如果使用普通的dict類來實作,代碼可以這樣寫

lst = [1, 3, 4, 2, 1, 3, 5]

count_dict = {}

for item in lst:

if item not in count_dict:

count_dict[item] = 0

count_dict[item] += 1

print(count_dict)

使用defaultdict,則可以更加簡潔一些,代碼縮進更少

from collections import defaultdict

lst = [1, 3, 4, 2, 1, 3, 5]

count_dict = defaultdict(int)

for item in lst:

count_dict[item] += 1

print(count_dict)