词典统计词频的优化方法(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)
posted @ 2022-03-03 17:05  时光如你般美好  阅读(68)  评论(0编辑  收藏  举报