Ordinamento di una tupla che contiene tuple
Domanda
Ho la seguente tupla, che contiene tuple:
MY_TUPLE = (
('A','Apple'),
('C','Carrot'),
('B','Banana'),
)
Vorrei ordinare questa tupla in base al secondo contenuto nelle tuple interne (ovvero, ordinare Apple, Carota, Banana anziché A, B, C).
Qualche idea?
Soluzione
from operator import itemgetter
MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=itemgetter(1)))
o senza itemgetter
:
MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=lambda item: item[1]))
Altri suggerimenti
Spesso c'è un built-in che lo farà soddisfare le tue esigenze, come str.lower (). Il modulo operatore contiene un numero di funzioni utili a questo scopo. Ad esempio, puoi ordinare le tuple in base sul loro secondo 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)]
Spero che questo aiuti.
sorted(my_tuple, key=lambda tup: tup[1])
In altre parole, quando si confrontano due elementi della tupla che si sta ordinando, ordinare in base al valore di ritorno della funzione passato come parametro chiave.
Ho ottenuto la stessa cosa usando questo codice, ma il tuo suggerimento è fantastico. Grazie!
templist = [ (line[1], line) for line in MY_TUPLE ]
templist.sort()
SORTED_MY_TUPLE = [ line[1] for line in templist ]