我需要一些有关如何根据元素频率对列表进行排序的帮助

时间:2019-04-28 12:15:09

标签: python python-3.x

我有一个清单

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)

1 个答案:

答案 0 :(得分: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)

这仅计算一次所有元素,从而在很大的列表上提供更好的性能。