如何根据不同的索引对 python 列表进行排序?

How to sort a python list, based on different indices?

例如,我们有一个列表列表。 该列表应该根据某个索引 i 进行反向排序,如果存在平局,则应根据条件对它们进行升序或降序排序。

例如:

名单是[['A', 2, 4.2], ['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5]]

如何排序以使结果为:

在第一种情况下,我希望它们根据 index 1 降序排序,然后如果 index 1 有平局则再次按 index 2 降序排序。

在第二种情况下,我希望它们根据 index 1 降序排序,然后如果 index 1 上有平局则按 index 2 升序排序。

我能想到的是:

myList = [['A', 2, 4.2], ['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5]]
print(sorted(myList, key= lambda x: (x[1], x[2]), reverse=True))
print(sorted(myList, key= lambda x: (x[1], -1*x[2]), reverse=True))

输出

[['B', 4, 4.5], ['A', 2, 4.2], ['D', 2, 3.5], ['C', 2, 3.3]]
[['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5], ['A', 2, 4.2]]

解释

sorted 函数有两个参数:一个可迭代对象(可以是列表、集合或任何可迭代对象)和一个键(定义排序模式)。在 key 参数中,我定义了一个元组((x[1], x[2]))来指示排序顺序,如果索引为 1 的元素是并列的,那么它会去检查索引号 2。第二个排序函数是相同的,但是当它转到索引号为 2 的元素时,它会检查其负值以按升序对它们进行排序。