collections模块 : 统计元素出现次数

发布时间 2023-09-21 15:36:51作者: 徐俊112

 

collections是Python标准库中的一个模块,提供了许多有用的集合类型,用于扩展内置的数据类型。

以下是collections模块中一些常用的集合类型:

  1. Counter:用于计数可迭代对象中元素出现的次数,并以字典的形式返回统计结果。
  2. defaultdict:是一个具有默认值的字典,当访问不存在的键时会返回默认值而不是抛出KeyError异常。
  3. OrderedDict:一个有序的字典,按照元素插入的顺序进行排序。
  4. deque:双向队列(Double-ended Queue),可以从队列的两端高效地进行操作,适用于队列和栈的实现。
  5. namedtuple:创建命名元组,它是一个类似于不可变的列表或命名的元组的对象。
  6. ChainMap:可以将多个字典合并为一个逻辑上的字典,从而使多个字典在逻辑上表现为一个字典。

这些集合类型提供了更丰富和便捷的功能,可以在处理数据时提供更多的选择和灵活性。

示例:

Counter:用于计数可迭代对象中元素出现的次数,并以字典的形式返回统计结果:

a=['颜连玉AB2793734', '招付松AB2793887', '吴庆荣AB2793972', '沈久定AB2793816', '陈春标AB2793873', '顾亚兵862032046725461', '王发862032047795372', '陈万红AB2793735', '陈留根AD8106697', '沈久定AB2793816', '南京刘氏农业科技有限公司(刘子权)AD8106711', '朱登龙AB2793958', '陈春如AB2793975', '李建AB2793969', '朱登龙868994035755607', '徐智龙AB2793951', '沈爱平AB1839420', '缪福强AB1839271', '王传亚AB1839285', '任赛荣AB1839290', '宦保根AB2793966', '陈鹏AB2793740', '王志英AB2793780', '王发AB2793939', '顾亚兵AB2793989', '高见AB2793717', '沈久定AB2793816', '许方来AB3446951', '朱登龙AB2793958', '李建AB2793969', '沈爱平AB1839420', '李长贵AB2793888', '王传亚AB1839285', '颜连玉AB2793734', '陆风祥AB2793911', '程龙彬AB2793893', '张如春AB3446715', '李建AB2793969', '虞分方AB2793720', '崔久海AB2793721', '王广胜AB2793944', '沈久定AB2793816', '刘映东AB2793831', '陈万红AB2793735', '孔庆友AB2793913', '辛开余862032040154064', '薛仕勇861522047279238', '曹元龙868994031128213', '辛开龙862032043644988', '镇江大全现代农业发展有限公司862032040275117', '镇江江之源渔业科技有限公司862032041447434', '潘德林(汤泉)868995030553046', '任赛荣861522041624850', '李建AB2793969', '王传亚AB1839285', '房龄友AB2793874', '毛学友AB2793906', '沈久定AB2793816', '吕银贵AB2793994', '徐智龙AB2793951', '戎来根AB2793856', '沈久定AB2793816', '荆菊芳AB2793845', '张如春AB3446715', '陈玉妹AB1839259', '胡守忠AB2793971', '张丹第AB2793996', '任赛荣AB1839290', '陈留根AD8106697', '李建AB2793969', '崔定发AB3446871', '李永红AB2793727', '刘雁冰AB3446807', '张丹第AB2793996', '盛维良AB3446877', '陈鹏AB2793740', '杨得宏AB2793936', '刘映东AB2793831', '陈永军AB2793832', '魏钰明AB2793790', '沈久定AB2793816', '吴冬林AF8761208', '胡守忠AB2793971', '崔定发AB3446871', '缪福强AB1839271', '王传亚AB1839285', '吴庆荣AB2793972', '许方来AB3446951', '陆玉柏AB1839428', '刘雁冰AB3446807', '李如庆AB2793742', '胡守忠AB2793971', '李长贵AB2793888', '刘映东AB2793831', '张丹第AB2793996', '周庆志AB2793807', '刘玉迎AB2793977', '孔庆友AB2793913', '任赛荣AB1839290', '陈万红AB2793735', '顾亚兵AB2793989', '王义康AB3446971', '王传亚AB1839285', '荆菊芳AB2793845']

counter = Counter(a)
print(counter)
Counter({'沈久定AB2793816': 7, '李建AB2793969': 5, '王传亚AB1839285': 5, '陈万红AB2793735': 3, '任赛荣AB1839290': 3, '刘映东AB2793831': 3, '胡守忠AB2793971': 3, '张丹第AB2793996': 3, '颜连玉AB2793734': 2, '吴庆荣AB2793972': 2, '陈留根AD8106697': 2, '朱登龙AB2793958': 2, '徐智龙AB2793951': 2, '沈爱平AB1839420': 2, '缪福强AB1839271': 2, '陈鹏AB2793740': 2, '顾亚兵AB2793989': 2, '许方来AB3446951': 2, '李长贵AB2793888': 2, '张如春AB3446715': 2, '孔庆友AB2793913': 2, '荆菊芳AB2793845': 2, '崔定发AB3446871': 2, '刘雁冰AB3446807': 2, '招付松AB2793887': 1, '陈春标AB2793873': 1, '顾亚兵862032046725461': 1, '王发862032047795372': 1, '南京刘氏农业科技有限公司(刘子权)AD8106711': 1, '陈春如AB2793975': 1, '朱登龙868994035755607': 1, '宦保根AB2793966': 1, '王志英AB2793780': 1, '王发AB2793939': 1, '高见AB2793717': 1, '陆风祥AB2793911': 1, '程龙彬AB2793893': 1, '虞分方AB2793720': 1, '崔久海AB2793721': 1, '王广胜AB2793944': 1, '辛开余862032040154064': 1, '薛仕勇861522047279238': 1, '曹元龙868994031128213': 1, '辛开龙862032043644988': 1, '镇江大全现代农业发展有限公司862032040275117': 1, '镇江江之源渔业科技有限公司862032041447434': 1, '潘德林(汤泉)868995030553046': 1, '任赛荣861522041624850': 1, '房龄友AB2793874': 1, '毛学友AB2793906': 1, '吕银贵AB2793994': 1, '戎来根AB2793856': 1, '陈玉妹AB1839259': 1, '李永红AB2793727': 1, '盛维良AB3446877': 1, '杨得宏AB2793936': 1, '陈永军AB2793832': 1, '魏钰明AB2793790': 1, '吴冬林AF8761208': 1, '陆玉柏AB1839428': 1, '李如庆AB2793742': 1, '周庆志AB2793807': 1, '刘玉迎AB2793977': 1, '王义康AB3446971': 1})

进一步拓展:过滤出多少次以上的元素

counter = Counter(a)
threshold = 5 # 过滤出现次数大于等于阈值的元素 filtered_statistics
= {k: v for k, v in counter.items() if v >= threshold}
{'沈久定AB2793816': 7, '李建AB2793969': 5, '王传亚AB1839285': 5}