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?

È stato utile?

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

Da Ordinamento di Mini-HOW TO

  

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 ]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top