我试图通过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]]
答案 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]]