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)

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案