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)