【问题标题】:Sort list on multiple arguments but only one in reversed order对多个参数的列表进行排序,但只有一个以相反的顺序排列
【发布时间】:2020-10-03 19:48:11
【问题描述】:

案例:我想根据两个属性对对象列表进行排序。第一个是表示得分的整数。第二个属性是 datetime.timedelta 对象。

我的目标:我想首先对列表进行排序(最高在顶部),然后在 timedelta 之后(最短/最小优先)。最终的结果应该是一个按分数排序的列表,当分数相等时,应该以最短的时间决定谁获胜。

我有以下代码:

    def show_result_full(self):
        result = self.sessions.all()
        result.sort(key=lambda x: (x.score, x.session_time), reverse=True)

代码步骤:

  1. 获取所有会话
  2. 如上所述对会话进行排序

这不起作用,因为现在它在两个属性上都颠倒了。期待您的建议,因为我真的坚持这一点。

【问题讨论】:

标签: python list lambda timedelta


【解决方案1】:

如何将它们一一排序?首先是次要条件,其次是主要条件? 为了清楚起见 - 创建了一个从 10 到 29 的数字列表,首先按倒序的第二个数字对它们进行排序,然后按不倒序的第一个数字对它们进行排序

a = [str(i) for i in range(10,29)]
a.sort(key = lambda x: x[1], reverse=True)
a.sort(key = lambda x: x[0])
print(a)

正如我所料,我得到了这个作为输出:

['19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '28', '27', '26', '25', '24', '23', '22', '21', '20']

对数字进行排序,第一个数字按升序排列,第二个数字按降序排列。

【讨论】:

    猜你喜欢
    • 2017-07-15
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    相关资源
    最近更新 更多