所以我有这个带有子列表的列表:
[[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]]
有什么建议可以解决吗?谢谢您的时间和帮助
答案 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)