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)
这仅按最后一个元素降序排序。如何添加实现按字母顺序对第一个和第二个元素进行排序。
返回一个元组,并否定该数字而不是使用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)