使用Python进行单词频率排序统计

45

我需要使用Python计算文本中每个单词的出现频率。我的想法是将单词存入字典中,并为每个单词计数。

现在如果我需要按出现次数对单词进行排序,是否可以使用同一个字典而不是使用新字典,其中键为计数,值为单词数组?


可能是重复的问题:Python:按值对字典进行排序 - S.Lott
有趣的事实:一个单词的频率总是大约等于1除以它的排名。因此,第二个最常见的单词出现的次数大约是第一位的一半。第三个出现了1/3次,依此类推。第333个出现的次数是第一位的1/333。这适用于所有语言,没有人真正知道为什么。(齐普夫定律 - ashleedawg
12个回答

0

这是我使用 Counter 对一副扑克牌按照最频繁出现的方式进行排序的方法:

counter = Counter([card.value for card in self.cards])
ordered = sorted(self.cards, key=lambda card: -counter[card.value])

首先,我创建一个包含所有卡牌值的计数器,然后使用计数器中的计数通过索引对卡牌进行排序。


0

之前的解决方案并没有像你在问题中要求的那样输出字典。

基于这里其他答案和这个stackoverflow帖子(https://dev59.com/EHRB5IYBdhLWcg3weHLx#613218),我的解决方案是使用sorted,然后按排序顺序重新创建字典:

from collections import Counter

counter = Counter({'blue': 35, 'red': 252, 'green': 127})

sorted_dict = dict(sorted(counter.items(), 
                          key=lambda item: item[1], 
                          reverse=True))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接