如何根据两个不同的键对复杂列表排序

19 投票
5 回答
13123 浏览
提问于 2025-04-16 05:48

我有一个奇怪的列表,构建方式如下:

[[name_d, 5], [name_e, 10], [name_a, 5]] 

我想先按数字从大到小排序,如果数字相同,再按名字从小到大排序。这样我想要的结果是:

[[name_e, 10], [name_a, 5], [name_d, 5]]

我试着想了一个可以在排序方法中使用的lambda函数,但我不太确定能不能做到。

5 个回答

0

我们给你的列表起个名字,叫做“arr”

arr.sort(key=lambda x:(x[0],-x[1]),reverse=True)

输出结果是 - [[name_e,10],[name_d,5],[name_a,5]]

2

你可以把这个列表排序两次,第二次只需要把顺序反过来:

import operator

l = [[name_d, 5], [name_e, 10], [name_a, 5]]

l.sort(operator.itemgetter(1))
l.sort(operator.itemgetter(0), reverse=True)

这样你就能得到你想要的排序结果了。

40

在Python中,排序函数可以让你传入一个函数作为排序的依据:

l = [[name_d, 5], [name_e, 10], [name_a, 5]]
# copy
l_sorted = sorted(l, key=lambda x: (x[1] * -1, x[0]))
# in place
l.sort(key=lambda x: (x[1] * -1, x[0]))

修改内容:
1. 排序顺序
2. 演示复制排序和原地排序

撰写回答