python:如何在两个不同的键上对复杂列表进行排序

Gio*_*lia 11 python sorting

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

[[name_d, 5], [name_e, 10], [name_a, 5]] 
Run Code Online (Sandbox Code Playgroud)

我想先用数字(desc)对它进行排序,然后,如果数字相同,则按名称(asc)排序.所以我想要的结果是:

[[name_e, 10], [name_a, 5], [name_d, 5]]
Run Code Online (Sandbox Code Playgroud)

我试着想一个我可以在sort方法中使用的lambda函数,但我不确定我能做到.

tba*_*ack 25

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]))
Run Code Online (Sandbox Code Playgroud)

编辑:
1.排序顺序
2.演示复制和就地排序

  • 是的,`-x [1]`会做的 (3认同)
  • @Giovanni:这不是黑盒子.你知道它是如何解决的吗?你不能修改它以适应你的问题? (2认同)