小编典典

如何按频率对该列表进行排序,这是我尝试过的,不是我所期望的

all

items = [4, 6, 2, 2, 6, 4, 4, 4]
result = sorted(items, key = items.count, reverse= True)

这输出 [4, 4, 4, 4, 6, 2, 2, 6]

而不是我所期望的: [4, 4, 4, 4, 6, 6, 2, 2]


阅读 45

收藏
2022-08-07

共1个答案

小编典典

问题是 2 和 6 在您的列表中具有相同的频率,因此它们的排序顺序是任意的。如果您想先按频率排序,然后按值排序,您可以利用以下事实轻松做到这一点:元组首先按索引 0 中的值排序,然后按索引 1 中的值排序,依此类推。

为此,我们可以创建一个构造项目计数和值的元组的函数,并将该函数用作排序键:

items = [4, 6, 2, 2, 6, 4, 4, 4]
sort_key = lambda x: (items.count(x), x)
result = sorted(items, key = sort_key, reverse = True)

输出:

[4, 4, 4, 4, 6, 6, 2, 2]
2022-08-07