Python clasifica tuple por diferentes criterios

Tengo una lista a = [(1,'a'), (1,'b'), (2,'c')] , y quiero obtener esta lista: [(2,'c'), (1,'a'), (1,'b')]

Si hago esto:

 sorted(a, reverse=True) 

Solo puedo conseguir:

 [(2,'c'), (1,'b'), (1,'a')] 

¿Cómo puedo obtener la lista que quiero?

Si desea conservar el orden en la lista original, pero ordenar solo por el primer elemento, puede hacerlo

 >>> from operator import itemgetter >>> a = [(1,'a'), (1, 'x'), (1,'b'), (2,'c')] >>> sorted(a, key=itemgetter(0), reverse=True) [(2, 'c'), (1, 'a'), (1, 'x'), (1, 'b')] 

En Python, las funciones sorted y sorted usan el algoritmo TimSort , que es una ordenación estable. Estar estable significa que el orden relativo original se conserva para aquellos elementos que se comparan iguales entre sí.

Si desea ordenar por múltiples criterios al mismo tiempo , puede usar una función para la clave en el caso de los enteros, devolviendo el número opuesto del número para la reversión, pero en el caso general, puede hacerlo clasificando varias veces, en orden inverso:

 >>> b = sorted(a, key=itemgetter(1)) # sort by second element, ascending >>> b.sort(key=itemgetter(0), reverse=True) # sort by first element, descending >>> b [(2, 'c'), (1, 'a'), (1, 'b'), (1, 'x')] 

Puedes lograr esto usando la función lambda sorted :

 >>> sorted(a, key=lambda x: (-x[0], x[1])) [(2, 'c'), (1, 'a'), (1, 'b')] 

Esto ordenará la lista en orden descendente del valor en el índice 0, y luego en orden ascendente del valor en el índice 1

Prueba esto,

 from operator import itemgetter sorted(a, key=itemgetter(0),reverse=True) 

Resultado

 [(2, 'c'), (1, 'a'), (1, 'b')]