【发布时间】:2016-10-27 12:45:36
【问题描述】:
我有以下函数来计算字符串中的单词并提取顶部的“n”:
功能
def count_words(s, n):
"""Return the n most frequently occuring words in s."""
#Split words into list
wordlist = s.split()
#Count words
counts = Counter(wordlist)
#Get top n words
top_n = counts.most_common(n)
#Sort by first element, if tie by second
top_n.sort(key=lambda x: (-x[1], x[0]))
return top_n
所以它按出现次数排序,如果并列,则按字母顺序排列。 以下示例:
print count_words("cat bat mat cat cat mat mat mat bat bat cat", 3)
有效(显示[('cat', 4), ('mat', 4), ('bat', 3)])
print count_words("betty bought a bit of butter but the butter was bitter", 3)
不起作用(显示[('butter', 2), ('a', 1), ('bitter', 1)],但应该有betty 而不是bitter,因为它们是绑定的并且be... 在bi... 之前)
print count_words("betty bought a bit of butter but the butter was bitter", 6)
有效(按预期在bitter 之前显示[('butter', 2), ('a', 1), ('betty', 1), ('bitter', 1), ('but', 1), ('of', 1)] 和betty)
是什么原因造成的(可能是字长?),我该如何解决?
【问题讨论】:
-
您可以通过执行
.most_common()来修复它,然后对结果进行排序和切片,而不是将n提供给most_common。