w Pythonie, mam coś jak poniżej (choć losowo tasuje):Jak sortować 2 Element krotką Strings w Mieszanego Zakonu Korzystanie parametr klucza (nie CMP)
l = [('a', 'x'),
('a', 'y'),
('a', 'z'),
('b', 'x'),
('b', 'y'),
('b', 'z'),
]
Jeśli zadzwonię sorted(l)
, otrzymuję posortowany wynik (jak wyżej), czego można się spodziewać. Jednak potrzebuję przesłać dalej sortowanie na element pierwszego sortowania krotki i odwrotnego elementu drugi element. Innymi słowy, chciałbym następujący wynik:
l = [('a', 'z'),
('a', 'y'),
('a', 'x'),
('b', 'z'),
('b', 'y'),
('b', 'x'),
]
w Python2.x, istnieje cmp
parametr, który może być przekazany do sorted()
osiągnąć ten wynik, ale Python3 nie ma już tego. Ma tylko parametr key
. Czy istnieje sposób na osiągnięcie pożądanej kolejności sortowania przy użyciu tylko parametru key
?
Wiem, że mogę zdefiniować zupełnie nową klasę do zawijania moich krotek, lub użyć czegoś w rodzaju functools.cmp_to_key
(która również tworzy klasę opakowania), ale to wszystko wydaje się być bardzo trudne dla tak prostej operacji. Czy nie ma innego rozwiązania?
edytuj: Powinienem dodać, że wszystkie ciągi nie będą ciągami jednoznakowymi i że w niektórych przypadkach lista krotek zawiera dane inne niż łańcuchowe [tj. (ciąg bazowy, datetime)].
Tylko w szkole są klucze sortowania szerokości 1 bajt. –