除了对反向列表理解进行列表理解之外,是否有一种 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)
使用Counter.most_common()方法,它会 为你 排序项目:
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 而不是直接排序:
heapq
>>> x.most_common(1) [('c', 7)]
在计数器之外,排序总是可以根据一个key功能进行调整;.sort()并且sorted()两者都采用可调用的方法,可让您指定对输入序列进行排序的值;sorted(x, key=x.get, reverse=True)会给你与 相同的排序x.most_common(),但只返回键,例如:
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):
(key, value)
>>> sorted(x.items(), key=lambda pair: pair[1], reverse=True) [('c', 7), ('a', 5), ('b', 3)]
有关更多信息,请参阅Python 排序方法。