我有一个包含以下格式的三个元素的列表:
[('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])
这只按最后一个元素降序排序。如何按字母顺序添加按顺序对第一个和第二个元素进行排序的工具。
答案 0 :(得分:4)
返回一个元组,并取消该数字而不是使用reverse
:
list_name.sort(key=lambda x: (-x[2],) + x[:2])
这将返回(-item3, item1, item2)
,并且排序首先按降序顺序中的整数item3
进行排序,当排序在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)]
答案 1 :(得分:-2)
只需将所有内容转换为字符串,然后比较..
list_name.sort(reverse=True, key=lambda x: '%6d%s%s'%(x[2],x[0],x[1]) )