按列表Python中的不同元素按字母顺序排列数字下降

时间:2014-03-30 03:37:51

标签: python list sorting

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

[('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 个答案:

答案 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]) )