将计数器放入频率排序列表中

时间:2015-05-19 03:07:08

标签: python list counter

我有一个包含以下信息的计数器: Counter({'red': 3, 'blue': 2, 'green': 1})

我希望将它转换为一个列表,从最小到最大的频率排序如下:

list = ['green', 'blue', 'red']

每次迭代计数器时,它似乎都将其放入按字母顺序排序的列表中。有没有一种简单的方法可以按照我想要的方式对其进行排序?

2 个答案:

答案 0 :(得分:2)

您只需要一个key function

sorted(yourcounter, key=lambda i: yourcounter[i])

他们的关键只需要输出固有的可订购结果。大多数情况下,如果它返回一个整数,你最好的选择。例如,您可以通过将结果设为负数来反转结果。

sorted(yourcounter, key=lambda i: -yourcounter[i])

在这种情况下,您也可以稍微简洁地将原文写为

sorted(yourcounter, key=yourcounter.get)

答案 1 :(得分:2)

没有参数的

Counter.most_common返回项目元组的列表,它们的计数按计数降序排序。 Python的内置reversed返回一个迭代器,它以相反的顺序遍历一个序列。

将所有这些与列表理解相结合以忽略计数,并且您有解决方案。

from collections import Counter

counter = Counter({'red': 3, 'blue': 2, 'green': 1})
sorted_items = [item for item, _ in reversed(counter.most_common())]