gpt4 book ai didi

python - 与 sort() 排序不一致

转载 作者:太空狗 更新时间:2023-10-30 01:45:48 26 4
gpt4 key购买 nike

我有以下函数来计算字符串中的单词并提取前“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 mat bat bat cat", 3)

有效(显示[('cat', 4), ('mat', 4), ('bat', 3)])

print count_words("betty买了一点黄油,但是黄油很苦", 3)

不起作用(显示 [('butter', 2), ('a', 1), ('bitter', 1)] 但应该有betty 而不是 bitter 因为它们是绑定(bind)的并且 be...bi... 之前)

print count_words("betty买了一点黄油,但是黄油很苦", 6)

有效(显示[('butter', 2), ('a', 1), ('betty', 1), ('bitter', 1), ( 'but', 1), ('of', 1)]bitter 之前有 betty 按预期)

是什么原因造成的(可能是字长?)我该如何解决?

最佳答案

问题不在于 sort 调用,而在于 most_commonCounter 是作为哈希表实现的,因此它使用的顺序是任意。当您请求 most_common(n) 时,它会返回 n 最常用的单词,如果有相同的单词,它会任意决定返回哪一个!

解决这个问题的最简单方法是避免使用 most_common 并直接使用列表:

top_n = sorted(counts.items(), key=lambda x: (-x[1], x[0]))[:n]

关于python - 与 sort() 排序不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40284943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com