【问题标题】:Multilevel sort on list of tuples but with change in sort order对元组列表进行多级排序,但排序顺序发生变化
【发布时间】:2021-04-10 23:28:31
【问题描述】:

我需要对以下列表进行排序:

list1 = [('a', 1, 2), ('b', 1, 3), ('c', 2, 1)]

基于每个元组的第二个(asc)和第三个元素(desc),结果:

 [('b',1,3),('a',1,2),('c',2,1)]

我尝试过使用

 sorted(list1, key=lambda x: x[1], x[2], reverse=lambda x:(True,False)  #TypeError: an integer is required (got type function)

 sorted(list1, key=lambda x: x[1], x[2], reverse=(True,False))  #TypeError: an integer is required (got type function)

 sorted(list1, key=lambda x: x[1], x[2], reverse=True,False)   #SyntaxError: positional argument follows keyword argument

如何将一个键按升序排序,另一个按降序排序?

【问题讨论】:

    标签: python python-3.x list sorting tuples


    【解决方案1】:

    首先,您应该提供一个值作为键。在这种情况下,您可以使用数字元组。

    最后一个值应该是负数,因为您希望它以相反的顺序排序,因为 a > b 暗示 -a < -b

    >>> sorted(list1, key=lambda x: (x[1],-x[2]) )
    [('b',1,3),('a',1,2),('c',2,1)]
    

    【讨论】:

      【解决方案2】:

      在关键参数中,反转第二个元素应该可以解决问题。例如,

      list1 = [('a', 1, 2), ('b', 1, 3), ('c', 2, 1)]
      print(sorted(list1, key=lambda x: (x[1], -x[2])))
      

      将输出

      >>> print(sorted(list1, key=lambda x: (x[1], -x[2])))
      [('b', 1, 3), ('a', 1, 2), ('c', 2, 1)]
      

      【讨论】:

      • 我发布时没有看到您的答案。猜猜我们得出了同样的结论。
      猜你喜欢
      • 1970-01-01
      • 2018-10-24
      • 2017-05-04
      • 1970-01-01
      • 2014-07-18
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多