2012-02-21 23 views
19

Powiel możliwe:
python: how to sort a complex list on two different keysSortowanie listy krotek w zależności od dwóch elementów

Mam listę krotek. Chcę je posortować w zależności od dwóch elementów. Tutaj jest następujący przykład

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)] 

wiem jak sortować je na drugim elemencie:

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

Ale jak to zrobić z dwoma kluczami?

+2

Sortowanie wykonane przez Pythona jest stabilne, co oznacza, że ​​można go sortować dwa razy, najpierw na najmniej ważnym elemencie, a następnie na najważniejszym elemencie. W niektórych przypadkach może to być w rzeczywistości szybsze (ale tylko kilka razy). –

Odpowiedz

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

Założyłem zamówienie na klucze z próbki wyjściowej.

+2

Może być posortowane (nieposortowane, klucz = element lambda: (element [1:])) lub posortowane (nieposortowane, klucz = element lambda: (element [1: 3])) jest lepsze – pod2metra

+2

@ pod2metra Istnieje wiele możliwości. Prawdopodobnie najlepiej byłoby 'operator.itemgetter (1,2)'. –

Powiązane problemy