我有一个包含以下信息的计数器:
Counter({'red': 3, 'blue': 2, 'green': 1})
我希望将它转换为一个列表,从最小到最大的频率排序如下:
list = ['green', 'blue', 'red']
每次迭代计数器时,它似乎都将其放入按字母顺序排序的列表中。有没有一种简单的方法可以按照我想要的方式对其进行排序?
答案 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())]