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)

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

Ответ 1

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

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

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