【问题标题】:Python - list in a list string reversing with sortPython - 列表字符串中的列表与排序反转
【发布时间】:2014-02-16 00:55:26
【问题描述】:

我正在尝试按 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]]

【问题讨论】:

    标签: python string sorting


    【解决方案1】:

    直接排序(不倒序)并取反 age

    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 的稳定排序的相对顺序。

    【讨论】:

    • 哇。非常感谢!不敢相信我错过了
    【解决方案2】:
     >>> m=[['mahesh',1],['a',2]]
     >>> sorted(m)
     [['a', 2], ['mahesh', 1]]
    

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 2014-10-04
      • 2013-04-19
      • 2013-06-18
      • 2016-05-28
      • 2020-04-30
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多