我想要一些关于如何根据元素频率对列表进行排序的帮助[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想要一些关于如何根据元素频率对列表进行排序的帮助[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有一份清单

list1 = [4,6,2,2,2,6,4,4,4]

我想根据其元素的频率对其进行排序。

排序后列表应如下所示:

[4,4,4,4,2,2,2,6,6]

我已将元素和元素频率存储在字典中。我想对这本词典进行排序。它的价值而不是关键。这是我无法编码的部分。

我写了以下代码。我有元素的频率,但我不知道如何排序。

def checkio(data):

    list1 = [4,6,2,2,2,6,4,4,4]
    list2 = list(dict.fromkeys(list1))
    print(list2)
    d = {}
    list4, result = [], []

    for i in list2:
        d[i] = list1.count(i)

    for i in list2:
        list3 = [i]*d[i]
        list4.append(list3)
    for sublist in list4:
        for item in sublist:
            result.append(item)

    return(result)

答案

简短的回答是在评论中,但它有一个小的性能缺点。你也可以使用collections.Counter

import collections

list1 = [4,6,2,2,2,6,4,4,4]
c = collections.Counter(list1)
sorted_list1 = sorted(list1, key=lambda k: c[k], reverse=True)

这只会对所有元素进行一次计算,从而在非常大的列表中提供更好的性能

以上是关于我想要一些关于如何根据元素频率对列表进行排序的帮助[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我需要帮助以这种特殊方式根据频率对 java 中的数组进行排序

根据元素的频率对数组进行排序

如何计算无序列表中元素的频率?

计算列表中单词的频率并按频率排序

如何根据另一个列表中元组元素的顺序对元组列表进行排序?

python一个列表中元素为元祖,想要根据元祖的第二个值进行排序,怎么做