2013-11-01 73 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