Python:collections.Counter

collections是Python内建的一个集合模块,其中提供了许多有用的集合类:

namedtuple:只有属性的简易

deque:双向增删的List

ChainMap:多个字典的链接

Counter计数器

以及其他可以参考:10.8 模块:collections - ShineLe - 博客园

 

Counter

作用:统计参数中各元素出现的次数。如果参数是list,统计结果为list中每个元素的出现次数;如果参数是str,统计结果为str中每个字母的出现次数。

用法:

#list
L=['red', 'blue', 'red', 'green', 'blue', 'blue'] c = Counter ( L ) c Counter({'blue': 3, 'red': 2, 'green': 1})
#str
c=Counter('color') c Counter({'o': 2, 'c': 1, 'l': 1, 'r': 1})

返回一个Counter,虽然看起来和dict很像,但二者并不一样。

Counter转list和dict的方法为:

 result_Counter=Counter(wordlist) #Counter类型
 result_list = sorted(result_Counter.items(), key=lambda item: item[1], reverse=True)#list类型,而且顺序是排序后的
 result_dict = dict(result_list)#dict类型

 

Counter中的元素可通过dict.items()方法提取,该方法返回一个List,List中的每个元素是一个tuple,tuple格式为( 元素 , 出现次数 )

c.items()
dict_items([('c', 1), ('o', 2), ('l', 1), ('r', 1)])

需要注意的是,返回的List中的元素并不是排序后的,所以要想得到排序后的list与dict,还是需要用上文提到的方法

学习自:(7条消息) Python collections.Counter()用法_qwe1257的博客-CSDN博客

 

例如:读文件统计词频并按照出现次数排序,文件有很多行,每行都是以空格隔开的单词

文件中的部分内容:

梨花 和善 友谊 生活
苹果 邪恶 朋友 工作
梨花 关系 成就 出发
……
复制代码
from collections import Counter

with open('词语.txt','r',encoding='utf-8') as f :
        lines = f.readlines() #按行读取
        lines = [lines[i].split() for i in range(len(lines)) ]#去除词语间的空格
words = []
for line in lines:
    words.extend(line) #将所有词语合并到一个list中
result = Counter(words)
print(result.most_common(10)) #输出频次最高的10个词语
复制代码

 

posted @   ShineLe  阅读(362)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示