在Python中按不同元素组织列表:数值降序和字母升序
我有一个包含三个元素的列表,格式如下:
[('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])
这个方法只按照最后一个元素的大小降序排序。请问我该如何在此基础上,按照字母顺序添加对第一个和第二个元素的排序呢?
2 个回答
-2
只需把所有东西都转换成字符串,然后进行比较就可以了。
list_name.sort(reverse=True, key=lambda x: '%6d%s%s'%(x[2],x[0],x[1]) )
7
返回一个元组,并且把数字取反,而不是使用 reverse
:
list_name.sort(key=lambda x: (-x[2],) + x[:2])
这样会返回 (-item3, item1, item2)
,排序的顺序是先根据整数 item3
从大到小排列,如果 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)]