2013-11-01 2 views
10

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

Например:

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

если сортировать по элементу 1:

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

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

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

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

но есть более элегантный, или вещий путь с помощью ключа и/или itemgetter?

ответ

12

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

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

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

+0

Да, это лучше. И точка, принятая с использованием «списка», будет редактировать, чтобы отразить. – drexiya

Смежные вопросы