Criterios de clasificación avanzados para una lista de tuplas anidadas

Tengo una lista de tuplas anidadas de la forma:

[(a, (b, c)), ...] 

Ahora me gustaría elegir el elemento que maximiza un tiempo minimizando b y c al mismo tiempo. Por ejemplo en

 [(7, (5, 1)), (7, (4, 1)), (6, (3, 1))] 

el ganador debe ser

 (7, (4, 1)) 

Cualquier ayuda es apreciada.

En mi entendimiento, quieres clasificar decrecientemente por a, y ascendentemente por b, luego por c. Si eso es correcto, puedes hacerlo así:

 >>> l=[(7, (5, 1)), (7, (4, 1)), (6, (3, 2)), (6, (3, 1))] >>> sorted(l, key = lambda x: (-x[0], x[1])) [(7, (4, 1)), (7, (5, 1)), (6, (3, 1)), (6, (3, 2))] 

Elegir al “ganador” sería tan simple como elegir el primer elemento.

Si se deben resumir byc, sería simplemente sum(x[1]) lugar de x[1] en mi ejemplo.

Mi función clave devuelve una tupla porque Python ordena correctamente las tuplas que contienen varios elementos:

 >>> sorted([(1,2), (1,1), (1,-1), (0,5)]) [(0, 5), (1, -1), (1, 1), (1, 2)] 
 >>> max(lst, key=lambda x: (x[0], -x[1][0], -x[1][1])) (7, (4, 1))