python - 转到python字典中列表中的下一个索引并执行计算
问题描述
我有一个带有列表的字典,列表中还有多个字典值,请看下面:
payment_data= {
'payment_details': [
{'name': 'X', 'to_pay': 9000, 'paid': False, 'date': '2021-09-28'},
{'name': 'X', 'to_pay': 8000, 'paid': False, 'date': '2021-09-27'},
{'name': 'X', 'to_pay': 6000, 'paid': False, 'date': '2021-09-26'},
{'name': 'X', 'to_pay': 5000, 'paid': False, 'date': '2021-09-25'},
{'name': 'X', 'to_pay': 3000, 'paid': False, 'date': '2021-09-24'},
{'name': 'X', 'to_pay': 2000, 'paid': False, 'date': '2021-09-23'}
]
}
我想要做的是,我会从用户那里获取支付金额的输入,如果用户给出 9000 ,那么字典的payment_details
where键的第一个索引将为 0 并且将是但支付金额大于 9000 ,假设 19000 ,在这种情况下,字典键的第一个索引将为 0 并且也会是,但它将减去前一个(19000-9000=10000)的值并转到下一个索引 1 ,当索引 1 值为 8000 时,它将是0(因为我们有 10000)和支付将是并转到上一个上的下一个索引。对不起,我的英语不好。我怎样才能在 Python3 中做到这一点?to_pay
paid
True
payment_details
to_pay
paid
True
True
解决方案
假设它payment_data["payment_details"]
是按to_pay
降序排序的,那么以下应该可以工作,至少是第一次(因为这样列表可能不再按 排序to_pay
)。
payment_amount = 13000
for details in payment_data["payment_details"]:
if details["to_pay"] == payment_amount:
details["to_pay"] = 0
details["paid"] = True
break
else:
for details in payment_data["payment_details"]:
to_pay = details["to_pay"]
if payment_amount >= to_pay:
details["to_pay"] = 0
payment_amount -= to_pay
else:
details["to_pay"] -= payment_amount
break
您可能可以将其分解为一些功能以避免重复。您可能还会考虑其他场景中的行为,例如在您的示例中,用户输入 4000 会发生什么?
推荐阅读
- r - 在 R 中,是否可以将 NA 作为有序因子水平的最小值?
- ios - 如何删除 AVExportSession 的 AVMetadata
- c++ - 为合同指定违规处理程序
- python-3.x - 在 Python 中将 int 转换为 String
- javascript - 在 RxJS 6 中重置 ReplaySubject
- c++ - 定义 const 变量的最佳方法
- java - 将数据从对话框片段返回到调用它的 Activity
- docker - Docker osTicket HTTP 错误
- itext7 - 如何从 PDF 文件中获取图像?
- machine-learning - 在java中加载张量流模型