词典统计词频的优化方法(collections模块--defaultdict、Counter、OrderedDict)
现在假设这样一种情况,有一组列表字符串。我们需要统计每个字符串出现的次数,并以键值对的形式保存起来。下面先来演示一个错误的写法。
a = ['a','b','r','a','d','r']
b = {}
for i in a:
if i in b:
b[i] += 1
else:
b[i] = 1
print(b)
对于上述代码,我们还可以进行优化,即使用字典的setdefault来代替if语句。对于不存在的key赋予默认值0,存在的key就不做任何操作。
a = ['a','b','r','a','d','r']
b = {}
for i in a:
b.setdefault(i, 0)
b[i] += 1
print(b)
问题来了,我们还可以再优化吗?上一次优化虽然去除了if语句,但对于每一个key,我们都需要进行判断是否需要给一个默认值。
defaultdict
答案是可以再次优化,python提供了一种默认值字典的数据结构。它允许我们在定义字典时给所有不存在的key设置默认值,这样当取不存在的key时,就不会报错。
from collections import defaultdict
a = ['a','b','r','a','d','r']
b = defaultdict(int)
for i in a:
b[i] += 1
print(b)