Вам нужен только один вызов sort
, потому что Python автоматически сортирует кортежи лексикографически.То есть, если вы попросите Python сравнить два кортежа, он упорядочит их по первому элементу, за исключением случаев, когда сравниваются равные, в этом случае он упорядочит их по второму элементу, за исключением случаев, когда сравниваются равные в этом случае ...*
Вы хотите отсортировать список элементов по минус их длине, а затем по алфавиту, поэтому вы хотите, чтобы ключ строки s
был кортежем (-len(s), s)
.Отсюда:
>>> l = ['aa','aaa','aaaa','b','bb','z','ccc']
>>> sort_key = lambda s: (-len(s), s)
>>> l.sort(key=sort_key)
>>> l
['aaaa', 'aaa', 'ccc', 'aa', 'bb', 'b', 'z']