Ordena una lista de tuplas por valor y luego alfabéticamente

Poco de un novato de python, pero tengo la siguiente lista de tuplas. Necesito ordenarlo por valor y si el valor es el mismo, resuelva los empates alfabéticamente. Aquí hay una muestra:

#original list_of_medals = [('Sweden', 24), ('Germany', 16), ('Russia', 10), ('Ireland', 10), ('Spain', 9), ('Albania', 8), ('Lithuania', 7), ('Iceland', 6), ('Malta', 5), ('Italy', 5), ('Serbia', 4), ('Estonia', 4), ('Turkey', 4), ('Moldova', 2), ('Azerbaijan', 2)] # \____/ \_____/ \______/ #after sorting / \ / \ / \ sorted_medals = [('Sweden', 24), ('Germany', 16), ('Ireland', 10), ('Russia', 10), ('Spain', 9), ('Albania', 8), ('Lithuania', 7), ('Iceland', 6), ('Malta', 5), ('Italy', 5), ('Estonia', 4), ('Serbia', 4), ('Turkey', 4), ('Azerbaijan', 2), ('Moldova', 2)] 

¿Es quizás posible con el módulo operator ?

Puede utilizar la función sorted :

 sorted_by_medals = sorted(list_of_medals, key=lambda tup: (-tup[1], tup[0])) 

En este caso, usaría una función lambda como el argumento key para sort() / sorted() :

 In [59]: sorted(list_of_medals, key=lambda x:(-x[1],x[0])) Out[59]: [('Sweden', 24), ('Germany', 16), ('Ireland', 10), ('Russia', 10), ('Spain', 9), ('Albania', 8), ('Lithuania', 7), ('Iceland', 6), ('Italy', 5), ('Malta', 5), ('Estonia', 4), ('Serbia', 4), ('Turkey', 4), ('Azerbaijan', 2), ('Moldova', 2)] 

La negación de x[1] es necesaria para ordenar las medallas en orden descendente , mientras que la clasificación de los nombres de los países en orden ascendente (simplemente estableciendo el reverse=True no lograría eso).

Como varias personas han señalado en los comentarios, una forma más general de hacer una clasificación compleja en una clave compuesta es realizar varios pasos de clasificación. Para hacer esto, ordene en un componente a la vez, comenzando con el menos significativo:

 In [67]: temp = sorted(list_of_medals, key=itemgetter(0)) In [68]: sorted(temp, key=itemgetter(1), reverse=True) Out[68]: [('Sweden', 24), ('Germany', 16), ('Ireland', 10), ('Russia', 10), ... 

Esto se basa en el hecho de que la clasificación de Python es estable, lo que significa que los elementos que se comparan de la misma manera nunca se reordenan.