Python - 在列表字符串中列出以sort排序的列表

时间:2014-02-16 00:55:26

标签: python string sorting

我试图通过int,然后通过字符串对列表中的列表进行排序。

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]]

2 个答案:

答案 0 :(得分: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]]

我在演示中交换了Stan和Bob,与您的示例相比,以说明这些名称确实按字母顺序排序,并且不是按照Python的稳定排序按相对顺序排列。

答案 1 :(得分:1)

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