如何按值对计数器进行排序? - 蟒蛇

时间:2014-01-06 13:02:52

标签: python sorting collections counter

除了对反向列表理解进行列表推导之外,还有一种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)

4 个答案:

答案 0 :(得分:163)

使用Counter.most_common() method,它会为您排序项目

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

它将以最有效的方式实现;如果您要求使用前N而不是所有值,则使用heapq而不是直接排序:

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

在柜台外,总是可以根据key功能调整排序; .sort()sorted()都采用callable,允许您指定对输入序列进行排序的值; 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 sorting howto

答案 1 :(得分:15)

@MartijnPieters答案的一个相当不错的补充是获取按事件排序的字典,因为Collections.most_common只返回一个元组。我经常将它与json输出结合使用以获得方便的日志文件:

from collections import Counter, OrderedDict

x = Counter({'a':5, 'b':3, 'c':7})
y = OrderedDict(x.most_common())

输出:

OrderedDict([('c', 7), ('a', 5), ('b', 3)])
{
  "c": 7, 
  "a": 5, 
  "b": 3
}

答案 2 :(得分:7)

是:

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

使用sorted关键字键和lambda函数:

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

这适用于所有词典。但是Counter有一个特殊的功能,它已经为你提供了排序的项目(从最频繁到最不频繁)。它被称为most_common()

>>> x.most_common()
[('c', 7), ('a', 5), ('b', 3)]
>>> list(reversed(x.most_common()))  # in order of least to most
[('b', 3), ('a', 5), ('c', 7)]

您还可以指定要查看的项目数:

>>> x.most_common(2)  # specify number you want
[('c', 7), ('a', 5)]

答案 3 :(得分:1)

更一般的排序方式,其中Managed application in local directory关键字定义排序方式,在数字类型表示降序之前减去:

key