2013-11-01 41 views
10

我在排序元組列表時遇到困難。我想按照列表中字符串的長度進行排序。Python按元組中的值排序列表的長度

例如:

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

如果我排序元件1:

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

這將排序的串的字母排序,而不是長度。我寧願排序就地和反向排序,最長的字符串第一。

我可以使用lambda和CMP,

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

但有一個更優雅,或Python的方式使用密鑰和/或itemgetter?

回答

12

那麼你可以讓拉姆達簡單:

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

另外,不要使用list作爲變量名;它已經被內置函數佔用。

+0

是的,這是更好。並且採用'list'所指向的點,將編輯來反映。 – drexiya