我有一个包含以下格式的三个元素的列表:
[('ABC', 'DEF', 2), ('GHI', 'JKL', 6), ('MNO', 'PQR', 22), ('ABC', 'STU', 2)...]
我想按数字对最后一个元素进行排序。然后按字母顺序排列第一个元素。如果有平局,最后是第二个元素。所以我的输出是:
[('MNO', 'PQR', 22), ('GHI', 'JKL', 6), ('ABC', 'DEF', 2), ('ABC', 'STU', 2)...]
我试过了
list_name.sort(reverse=True, key=lambda x: x[2])
这仅按降序排列最后的元素。如何添加按字母顺序对第一个和第二个元素进行排序的工具。
最佳答案
返回一个元组,并对数字取反而不是使用reverse
:
list_name.sort(key=lambda x: (-x[2],) + x[:2])
这将返回 (-item3, item1, item2)
并且排序首先按 降序 的整数 item3
顺序进行,当绑定(bind)数字排序在 item1
上完成(按字母顺序,升序),然后在 item2
上完成。
实际上,元组是按字典顺序排序的。
演示:
>>> 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)]
关于python - 按列表 Python 中的不同元素按数字降序然后按字母升序组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22739971/