Python сортирует список по длине значения в кортеже

у меня возникли трудности с сортировкой списка кортежей. Я хотел бы отсортировать по длине строки в списке.

например:

l = [(99,'bbc', 121),(33,'abcd', 231),(44,'zb', 148), (23,'abcde',221)]

Если я сортирую по элементу 1:

l.sort(key=itemgetter(1), reverse=True)

это будет сортировать по алфавитному ранжированию строк, а не по длине. Я бы предпочел сортировать на месте и обратный сортировку, сначала с самой длинной строкой.

Я могу использовать лямбду и cmp,

l.sort(lambda x,y: cmp(len(x[1]), len(y[1])), reverse=True)

но есть ли более элегантный или подходящие для Python способ использование ключа и / или itemgetter?

1 ответов


Ну вы можете сделать лямбда проще:

l.sort(key=lambda t: len(t[1]), reverse=True)

кроме того, не используйте list как имя переменной; оно уже принято встроенной функцией.