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

Put counter into a frequency ordered list

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

我希望将它转换成一个列表,从最少到最多的频率排序如下:

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

每次我遍历计数器时,它似乎都将它放入一个按字母顺序排序的列表中。有没有一种简单的方法可以让它按我想要的方式排序?

你只需要一个key function:

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

他们的关键只需要输出一个固有的可排序结果。大多数时候你最好的选择是 returns 一个整数。例如,您可以通过将结果设为负数来反转结果。

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

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

sorted(yourcounter, key=yourcounter.get)

Counter.most_common with no arguments returns a list of tuples of the items and their counts sorted in descending order by count. Python's built-in reversed returns 以相反顺序遍历序列的迭代器。

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

from collections import Counter

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