在python中用子列表对列表进行排序

时间:2019-03-26 19:41:53

标签: python list sorting

所以我有这个带有子列表的列表:

[[39, 4, 43], [23, 3, 26], [46, 5, 51], [66, 15, 51], [66, 7, 73], [10, 2, 12], [79, 8, 87]]

我需要按照每个子列表中第三个元素的顺序对列表进行排序。但是在这种情况下,如果其中两个或多个相等:

[46, 5, 51], [66, 15, 51]

排序时的算法应将具有最大第一元素的子列表放在第一位,因此所需的输出应像这样。

 [[79, 8, 87],[66, 7, 73],[66, 15, 51],[46, 5, 51],[39, 4, 43],[23, 3, 26],[10, 2, 12]]

有什么建议可以解决吗?谢谢您的时间和帮助

2 个答案:

答案 0 :(得分:8)

您可以将排序顺序设置为元组,如下所示:

l = [[39, 4, 43], [23, 3, 26], [46, 5, 51], [66, 15, 51], [66, 7, 73], [10, 2, 12], [79, 8, 87]]

sorted(l, key = lambda x: (x[2],x[0]), reverse=True)

结果:

  

[[79,8,87],[66,7,73],[66,15,51],[46,5,51],[39,4,43],   [23,3,26],[10,2,12]]

答案 1 :(得分:1)

还有itemgetter可以进行这种排序:

from operator import itemgetter

l = [[39, 4, 43], [23, 3, 26], [46, 5, 51], [66, 15, 51], [66, 7, 73], [10, 2, 12], [79, 8, 87]]

sorted(l, key=itemgetter(2, 0), reverse=True)