我有一个清单
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)
答案 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)
这仅计算一次所有元素,从而在很大的列表上提供更好的性能。