背景介绍
在python的应用场景中,我们常常需要通过建立统计表来对某一个数据集中某些数据出现次数的统计,这时候经常会使用到python的字典数据类型建立映射表,一般的方法可能会比较繁琐,本篇博客介绍collection.Counter方法帮助简化统计出现数量的过程
任务设计
统计字符串‘fbhsiagfhiwagbourahlbgojlrghboajwbhifalbg’中每个字母出现的次数
直接统计
str_to_counts = 'fbhsiagfhiwagbourahlbgojlrghboajwbhifalbg'
str_count_dict = {}
for count in str_to_counts:
if count in str_count_dict.keys():
str_count_dict[count]+=1
else:
str_count_dict[count] = 1
print(str_count_dict)
结果
{'f': 3, 'b': 6, 'h': 5, 's': 1, 'i': 3, 'a': 5, 'g': 5, 'w': 2, 'o': 3, 'u': 1, 'r': 2, 'l': 3, 'j': 2}
可以看到完成了统计的任务,但是代码不够简洁美观
使用defaultdict
from collections import defaultdict
str_to_counts = 'fbhsiagfhiwagbourahlbgojlrghboajwbhifalbg'
str_count_dict = defaultdict(int)
for count in str_to_counts:
str_count_dict[count] += 1
print(str_count_dict)
这里通过str_count_dict = defaultdict(int)默认了字典的值的类型为int,所以后面的循环中可以直接对字典的值进行+=1的操作,完成统计的任务
上面的方法看上去已经简化了,我们还可以使用collection.Counter进一步简化
import collections
str_to_counts = 'fbhsiagfhiwagbourahlbgojlrghboajwbhifalbg'
str_count_dict = collections.Counter(str_to_counts)
print(str_count_dict)
可以直接通过str_count_dict = collections.Counter(str_to_counts)一行代码完成统计的任务
欢迎大家讨论交流~