【发布时间】:2015-12-09 08:37:37
【问题描述】:
正如标题所说,我需要编写一个代码来返回频率最高的 5 个单词(来自输入字符串)的列表。这是我目前所拥有的:
from collections import defaultdict
def top5_words(text):
tally = defaultdict(int)
words = text.split()
for word in words:
if word in tally:
tally[word] += 1
else:
tally[word] = 1
answer = sorted(tally, key=tally.get, reverse = True)
return(answer)
例如,如果你输入:top5_words("one one was a racehorse two two is one too") 它应该返回:["one", "two", "was", "a", "racehorse"] 但是而是返回:['one', 'was', 'two', 'racehorse', 'too', 'a'] - 有人知道这是为什么吗?
编辑:
感谢 Anand S Kumar,这就是我现在所拥有的:
import collections
def top5_words(text):
counts = collections.Counter(text.split())
return [elem for elem, _ in sorted(counts.most_common(),key=lambda x:(-x[1], x[0]))[:5]]
【问题讨论】:
-
字典没有任何顺序,对于具有相同计数的单词,顺序可以是任何东西。另外,您的预期输出对我来说没有任何意义。
-
出场次数-一:3,曾:2,二:2,赛马:1,太:1,一:1。看来你需要按字母顺序打平。
-
我该怎么做?
标签: python sorting dictionary frequency