如何使用自定义条件对一个列表列表进行排序?

我有一个银行账户列表,其中注册了两项操作,存款和取款。

列表中的每个列表都具有 [date_of_operation, amount, balance] 格式,其中正数表示“存款操作”,负数表示“取款操作”

例子:

# date       || amount  || balance
# 01/01/2001 || -200.00 || 300.76
# 20/10/1992 || 500.76  || 500.76
# 13/07/2021 || 1000.00 || 1300.76
# 13/07/2021 || -200.00 || 1100.76


account = [
        [datetime.strptime("01/01/2001", "%d/%m/%Y"), -200.0, 300.76],
        [datetime.strptime("20/10/1992", "%d/%m/%Y"), 500.76, 500.76], 
        [datetime.strptime("13/07/2021", "%d/%m/%Y"), 1000.0, 1300.76], 
        [datetime.strptime("13/07/2021", "%d/%m/%Y"), -200, 1100.76]
]

现在我想用两个条件对列表进行排序:

  1. 按日期倒序
  2. 如果两个项目之间的日期相同,则余额必须遵循一致的顺序

所需输入的示例:

date       || amount  || balance
13/07/2021 || -200.00 || 1100.76
13/07/2021 || 1000.00 || 1300.76
01/01/2001 || -200.00 || 300.76
20/10/1992 || 500.76  || 500.76

但是我无法完成此操作,我尝试按日期和余额以相反的顺序对列表进行排序:

account = sorted(account, key=lambda x:(x[0], x[2]), reverse=True)

但是输出不是想要的,因为前两项是互换的:

date       || amount  || balance
13/07/2021 || 1000.00 || 1300.76
13/07/2021 || -200.00 || 1100.76
01/01/2001 || -200.00 || 300.76
20/10/1992 || 500.76  || 500.76

如何在排序函数中使用自定义条件获得所需的输出?

回答

最简单的解决方法是取消排序键中的 balance 组件:

ount = sorted(account, key=lambda x:(x[0], -x[2]), reverse=True)

这将有效地消除reverse对余额的影响,同时使日期部分不受影响。


以上是如何使用自定义条件对一个列表列表进行排序?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>