Por ejemplo, tenemos una lista de lista. La lista debe ordenarse inversamente en función de algún índice i, y si hay un empate, deben ordenarse en orden ascendente o descendente según la condición.
Por ejemplo:
La lista es [['A', 2, 4.2], ['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5]]
Cómo ordenar esto para que el resultado sea:
[['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]] En la primera condición, quiero que se clasifiquen en orden descendente según el index 1 , y luego nuevamente en orden descendente en el index 2 si hay un empate en el index 1 .
En la segunda condición, quiero que se clasifiquen en orden descendente según el index 1 , y luego en orden ascendente en el index 2 si hay un empate en el index 1 .
Lo que se me ocurre es lo siguiente:
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]] La función sorted toma dos argumentos: un iterable, que puede ser una lista, un conjunto o cualquier cosa que sea iterable, y una clave, que define el patrón de clasificación. En el argumento clave, he definido una tupla ( (x[1], x[2]) ) que indica el orden de clasificación, si el elemento con índice 1 está empatado, entonces va a verificar el índice número 2. El segundo La función sorted es la misma, pero cuando va al elemento con número de índice 2, comprueba su valor negativo para ordenarlos en orden ascendente.