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



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

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

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

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

您只需要一个键函数:

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

他们只需要输出一个内在有序的结果。大多数情况下,最好的选择是返回一个整数。例如,您可以通过使其为负来反转结果。

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

在这种情况下,你也可以将原文写得更简洁一些,如

sorted(yourcounter, key=yourcounter.get)

不带参数的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())]

相关内容

  • 没有找到相关文章

最新更新