gpt4 book ai didi

python - 如何按字典顺序(按计数器,然后按值)对 Counter.mostCommon(n) 的结果进行排序?

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:16 28 4
gpt4 key购买 nike

如何按计数器对 Counter.mostCommon 的结果进行排序,然后按值排序?

我的原始代码:

from collections import Counter
for counter in Counter("abcdefg").most_common(3):
print(counter[0], counter[1])

输出每次都不同,因为每个值的计数都是 1。有时是

a 1
b 1
e 1

有时

b 1
d 1
f 1

等等

我想要这个:

a 1
b 1
c 1

我也试过对生成的元组进行排序::

from collections import Counter
for counter in sorted(Counter("abcdefg").most_common(3), key=lambda x: x[0]): print(counter[0], counter[1])

对字符串进行排序

from collections import Counter
for counter in Counter(sorted("abcdefg")).most_common(3): print(counter[0], counter[1])

但我得到了同样不可预测的结果

最佳答案

这里的问题是 Counter 字典是无序的,most_common 不关心键。为此,您需要对字典的项目进行排序,然后取出最常见的 3 个。

counter = Counter('abcdef')
most_common = sorted(counter.items(), key=lambda pair: (-pair[1], pair[0]))

这将首先对 -pair[1](计数)进行排序。由于负数,较高的计数将首先出现。接下来我们对 pair[0](键)进行排序,它将按正常递增顺序按字典顺序排序。

从这里开始,您需要切下您想要的项目......

most_common[:3]

或者,我们可以从 the source code 中取出一页并重新实现 most_common 以考虑 key 。

import heapq as _heapq

def most_common(counter, n=None):
'''List the n most common elements and their counts from the most
common to the least. If n is None, then list all element counts.

>>> Counter('abcdeabcdabcaba').most_common(3)
[('a', 5), ('b', 4), ('c', 3)]

'''
# Emulate Bag.sortedByCount from Smalltalk
sort_key = lambda pair: (-pair[1], pair[0])
if n is None:
return sorted(counter.iteritems(), key=sort_key)
return _heapq.nsmallest(n, counter.iteritems(), key=sort_key)

关于python - 如何按字典顺序(按计数器,然后按值)对 Counter.mostCommon(n) 的结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33529666/

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