小编典典

如何按值对计数器进行排序?\- Python

all

除了对反向列表理解进行列表理解之外,是否有一种 Pythonic 方法可以按值对 Counter 进行排序?如果是这样,它比这更快:

>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> sorted(x)
['a', 'b', 'c']
>>> sorted(x.items())
[('a', 5), ('b', 3), ('c', 7)]
>>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()])]
[('b', 3), ('a', 5), ('c', 7)]
>>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()], reverse=True)]
[('c', 7), ('a', 5), ('b', 3)

阅读 97

收藏
2022-07-01

共1个答案

小编典典

使用Counter.most_common()方法,它会
为你 排序项目:

>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> x.most_common()
[('c', 7), ('a', 5), ('b', 3)]

它将以最有效的方式这样做;如果您要求 Top N 而不是所有值,heapq则使用 a 而不是直接排序:

>>> x.most_common(1)
[('c', 7)]

在计数器之外,排序总是可以根据一个key功能进行调整;.sort()并且sorted()两者都采用可调用的方法,可让您指定对输入序列进行排序的值;sorted(x, key=x.get, reverse=True)会给你与 相同的排序x.most_common(),但只返回键,例如:

>>> sorted(x, key=x.get, reverse=True)
['c', 'a', 'b']

或者您可以仅对给定对的值进行排序(key, value)

>>> sorted(x.items(), key=lambda pair: pair[1], reverse=True)
[('c', 7), ('a', 5), ('b', 3)]

有关更多信息,请参阅Python 排序方法。

2022-07-01