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

3
例如,我们有一个列表的列表。 根据某个索引i,应该对列表进行反向排序,如果有绑定,则应根据条件按升序或降序排序。
例如: 列表是[['A',2,4.2],['B',4,4.5],['C',2,3.3],['D',2,3.5]]
如何对其进行排序,以使结果为: - [['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]]
在第一种情况下,我希望它们根据“索引1”按降序排序,然后根据“索引2”的降序排序,如果在“索引1”上有绑定的话。 在第二种情况下,我希望它们根据“索引1”按降序排序,然后按“索引2”的升序排序,如果在“索引1”上有绑定的话。
1个回答

3
我所能想到的是以下内容:
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 函数接受两个参数:一个可迭代对象,可以是列表、集合或任何可迭代的对象,和一个键,用于定义排序模式。在键参数中,我定义了一个元组 ((x[1], x[2])),它表示排序的顺序,如果索引为 1 的元素相同时,则去检查索引编号为 2 的元素。第二个 sorted 函数也是一样,但当它到达索引号 2 的元素时,它会检查其负值以按升序排序。


如果我对列表中的字符串元素执行“-1 * x [i]”,它会失败。 - Harshit Bhat
@HarshitBhat 你想按照什么模式对列表中的字符串进行排序?我的意思是,你想按照什么规则来排序? - TheFaultInOurStars
就像它们在字典中出现的那样。 - Harshit Bhat
@HarshitBhat 对于字符串,我建议您使用ord将字符(字符串)转换为数字。类似这样:-1 * ord[x[i]]。请确保x[i]是一个字符。 - TheFaultInOurStars

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接