【问题标题】:Put counter into a frequency ordered list将计数器放入频率有序列表
【发布时间】:2015-05-19 03:07:08
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python list counter


    【解决方案1】:

    你只需要一个key function:

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

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

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

    在这种情况下,您还可以将原文写得更简洁一些

    sorted(yourcounter, key=yourcounter.get)
    

    【讨论】:

      【解决方案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())]
      

      【讨论】:

        猜你喜欢
        • 2019-06-14
        • 1970-01-01
        • 2013-12-28
        • 1970-01-01
        • 2013-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多