按列表 Python 中的不同元素按数字降序然后按字母顺序升序组织

use*_*469 4 python sorting list

我有一个包含以下格式的三个元素的列表:

[('ABC', 'DEF', 2), ('GHI', 'JKL', 6), ('MNO', 'PQR', 22), ('ABC', 'STU', 2)...]
Run Code Online (Sandbox Code Playgroud)

我想按数字排序最后一个元素。然后按字母顺序按第一个元素。最后由第二个元素如果有平局。所以我的输出是:

[('MNO', 'PQR', 22), ('GHI', 'JKL', 6), ('ABC', 'DEF', 2), ('ABC', 'STU', 2)...]
Run Code Online (Sandbox Code Playgroud)

我试过了

list_name.sort(reverse=True, key=lambda x: x[2])
Run Code Online (Sandbox Code Playgroud)

这仅按最后一个元素降序排序。如何添加实现按字母顺序对第一个和第二个元素进行排序。

Mar*_*ers 7

返回一个元组,并否定该数字而不是使用reverse

list_name.sort(key=lambda x: (-x[2],) + x[:2])
Run Code Online (Sandbox Code Playgroud)

此返回(-item3, item1, item2)和排序首先按降序按整数item3进行,当绑定到数字时,排序在(按字母顺序,升序)完成,然后在。item1item2

实际上,元组按字典顺序排序。

演示:

>>> list_name = [('ABC', 'DEF', 2), ('GHI', 'JKL', 6), ('MNO', 'PQR', 22), ('ABC', 'STU', 2)]
>>> list_name.sort(key=lambda x: (-x[2],) + x[:2])
>>> list_name
[('MNO', 'PQR', 22), ('GHI', 'JKL', 6), ('ABC', 'DEF', 2), ('ABC', 'STU', 2)]
Run Code Online (Sandbox Code Playgroud)