使用python标准模块提供的字典时,如果所用的key不存在, 就会引发KeyError异常, 但使用collections 模块提供的defaultdict就可以避免这种错误
dic = {}
print(dic['python'])
异常内容为
print(dic['python'])
KeyError: 'python'
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,返回的就是空列表。
既然不会引发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)
QQ交流群: 211426309