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?

¿Fue útil?

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

De Ordenamiento Mini-HOW TO

  

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 ]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top