在Python中按不同元素组织列表:数值降序和字母升序

4 投票
2 回答
3495 浏览
提问于 2025-04-18 00:31

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

[('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)]

撰写回答