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

问题描述 投票:-1回答:1

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

我有一份清单

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)

python python-3.x
1个回答
1
投票

简短的回答是在评论中,但它有一个小的性能缺点。你也可以使用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)

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


推荐问答