如何对 Python 中的列表列表进行多级排序?

How to do a multi level sort on list of lists in Python?

我有以下代码:

lst = [['candy','30'], ['apple','10'], ['baby','20'], ['baby','10']]
lst.sort(key=lambda x: (x[1], x[0]))
print(lst)

有了这个输出是:

[['apple', '10'], ['baby', '10'], ['baby', '20'], ['candy', '30']]

我试图以降序显示名称,而以升序显示值。 python 中是否有预先构建的方法来实现此目的?

预期输出:

[['baby', '10'], ['apple', '10'], ['baby', '20'], ['candy', '30']]

您可以尝试设置 reverse = True.

lst = [['candy','30'], ['apple','10'], ['baby','20'], ['baby','10']]
lst.sort(key=lambda x: (x[1], x[0]), reverse=True)
print(lst)

您可以通过按名称和负值反向排序来实现:

>>> lst = [['candy','30'], ['apple','10'], ['baby','20'], ['baby','10']]
>>> lst.sort(key=lambda x: (x[0], -int(x[1])), reverse=True)
>>> lst
[['candy', '30'], ['baby', '10'], ['baby', '20'], ['apple', '10']]

编辑:响应OP的编辑,值应该优先于名称,所以正确的顺序是:

>>> lst = [['candy','30'], ['apple','10'], ['baby','20'], ['baby','10']]
>>> lst.sort(key=lambda x: (-int(x[1]), x[0]), reverse=True)
>>> lst
[['baby', '10'], ['apple', '10'], ['baby', '20'], ['candy', '30']]

您更改了预期的输出,这就是解决方案:

lst.sort(key=lambda x: (-int(x[1]), x[0]), reverse=True)
#[['baby', '10'], ['apple', '10'], ['baby', '20'], ['candy', '30']]

这是编辑问题之前的答案,并在排序之前将条目分开:

print(*zip(sorted([x[0] for x in lst], reverse=True), sorted([x[1] for x in lst])))
# ('candy', '10') ('baby', '10') ('baby', '20') ('apple', '30')