2014-02-16 31 views
2

我想通過一個int,然後由一個字符串對列表中的列表進行排序。Python - 列表中的字符串逆序排序

lst = [['Bob', 22], ['Jim', 33], ['Stan', 22]] 
lst.sort(key = lambda x: (x[1], -x[0]), reverse = True) 

正如你所看到的,我想通過自己的年齡對它們進行排序,然後通過自己的名字,如果他們有相同的年齡,按降序排列。然而,這返回一個錯誤,說TypeError: bad operand type for unary -: 'str',因爲我正在使用負號嘗試並且不顛倒字符串,因此它將繼續按升序排序

如何按年齡,然後按名稱升序?

它應該返回:

[['Jim', 33], ['Bob', 22], ['Stan', 22]] 

回答

7

排序直行(不反轉),並否定的年齡改爲:

lst.sort(key=lambda x: (-x[1], x[0])) 

這種種年齡降序排列(自-33會在-22之前排序),然後按字母順序排列名稱。

演示:

>>> lst = [['Stan', 22], ['Jim', 33], ['Bob', 22]] 
>>> sorted(lst, key=lambda x: (-x[1], x[0])) 
[['Jim', 33], ['Bob', 22], ['Stan', 22]] 

我換斯坦和鮑勃在我的演示,相比於你的樣品,以表明名稱確實是按照字母順序排列,並通過Python的穩定不只是留在相對順序分類。

+0

哇。非常感謝!不能相信我錯過了這一點 – TwoShorts

1
>>> m=[['mahesh',1],['a',2]] 
>>> sorted(m) 
[['a', 2], ['mahesh', 1]]