Próbuję uporządkować listę krotek, takie jak:Sortowanie na różnych poziomach w Pythonie
[('Pineapple', 1), ('Orange', 3), ('Banana', 1), ('Apple', 1), ('Cherry', 2)]
lista posortowana powinno być:
[('Orange', 3), ('Cherry', 2), ('Apple', 1), ('Banana', 1), ('Pineapple', 1)]
Więc tutaj 1-ci lista powinna być klasyfikowane na podstawie tuple[1]
w porządku malejącym, a następnie, jeśli wartości tuple
(tuple[1]
) są zgodne pod względem Apple
, Banana
& Pineapple
- lista powinna być dalej sortowana na podstawie tuple[0]
w ascendi w porządku.
Próbowałem możliwe ways-
top_n.sort(key = operator.itemgetter(1, 0), reverse = True)
# Output: [(Orange, 3), (Cherry, 2), (Pineapple, 1), (Banana, 1), (Apple, 1)]
jak "reverse = True"
, ananas, banan potem ...
końcu musiał wymyślić rozwiązanie:
top_n.sort(key = operator.itemgetter(0), reverse = False)
top_n.sort(key = operator.itemgetter(1), reverse = True)
Czy istnieje lepszy sposób, aby uzyskać rozwiązanie, takie jak moje pierwsze podejście. Próbuję dowiedzieć się więcej o Pythonie, szukając w ten sposób takiego rozwiązania.
Właściwie można po prostu zrobić: 'top_n.sort(); top_n.sort (key = itemgetter (1), reverse = True) '. Ponieważ 'reverse = False' jest wartością domyślną. Używanie 'itemgetter (0)' nie ma zbytniego sensu, ponieważ sekwencje są już sortowane przez pierwszy element, więc możesz po prostu uniknąć użycia 'key'. – Bakuriu
@Bakuriu: Tak! Prawdziwe. Dzieki za sugestie. –