Ordenar una tupla que contiene tuplas
Pregunta
Tengo la siguiente tupla, que contiene tuplas:
MY_TUPLE = (
('A','Apple'),
('C','Carrot'),
('B','Banana'),
)
Me gustaría ordenar esta tupla según el valor segundo que se encuentra en las tuplas internas (es decir, clasifique Apple, Zanahoria, Banana en lugar de A, B, C).
¿Algún pensamiento?
Solución
from operator import itemgetter
MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=itemgetter(1)))
o sin itemgetter
:
MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=lambda item: item[1]))
Otros consejos
A menudo hay una incorporada que va a coincide con sus necesidades, como str.lower (). El módulo operador contiene un número. de funciones útiles para este fin. Por ejemplo, puedes ordenar tuplas basadas en su segundo elemento usando operator.itemgetter ():
>>> import operator
>>> L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)]
>>> map(operator.itemgetter(0), L)
['c', 'd', 'a', 'b']
>>> map(operator.itemgetter(1), L)
[2, 1, 4, 3]
>>> sorted(L, key=operator.itemgetter(1))
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
Espero que esto ayude.
sorted(my_tuple, key=lambda tup: tup[1])
En otras palabras, al comparar dos elementos de la tupla que estás clasificando, ordena según el valor de retorno de la función pasada como parámetro clave.
Logré lo mismo con este código, pero tu sugerencia es excelente. Gracias!
templist = [ (line[1], line) for line in MY_TUPLE ]
templist.sort()
SORTED_MY_TUPLE = [ line[1] for line in templist ]