2012-02-21 19 views
19

Eventuali duplicati:
python: how to sort a complex list on two different keysOrdina una lista di tuple seconda due elementi

Ho una lista di tuple. Voglio ordinarli in base a due elementi. Qui viene riportato di seguito viene

unsorted = [('a', 4, 2), ('a', 4, 3), ('a', 7, 2), ('a', 7, 3), ('b', 4, 2), ('b', 4, 3), ('b', 7, 2), ('b', 7, 3)] 
sorted = [('a', 4, 2), ('b', 4, 2), ('a', 4, 3), ('b', 4, 3), ('a', 7, 2), ('b', 7, 2), ('a', 7, 3), ('b', 7, 3)] 

So come ordinare loro sul secondo elemento:

sorted(unsorted, key = lambda element : element[1]) 

Ma come fare con due chiavi?

+2

L'ordinamento eseguito da Python è stabile, il che significa che è possibile ordinarlo due volte, prima sull'elemento meno importante, quindi sull'elemento più importante. In alcuni casi questo può essere più veloce (ma solo alcune volte). –

risposta

38
sorted(unsorted, key=lambda element: (element[1], element[2])) 

Ho assunto un ordine per le chiavi dall'output di esempio.

+2

Può essere ordinato (non ordinato, chiave = elemento lambda: (elemento [1:])) o ordinato (non ordinato, chiave = elemento lambda: (elemento [1: 3])) è migliore – pod2metra

+2

@ pod2metra Ci sono numerose possibilità. Probabilmente il migliore sarebbe 'operator.itemgetter (1,2)'. –