You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3如何遍历字典内列表元素依次抵扣支付金额并更新数据?

实现思路
  • 先获取用户输入的总支付金额,做合法性校验,确保输入为非负数值
  • 初始化剩余支付金额为用户输入的总金额
  • 按顺序遍历payment_details列表中的每条待付款记录:
    • 若剩余支付金额为0,直接终止遍历
    • 若剩余支付金额 ≥ 当前记录待付金额:将当前记录to_pay设为0、paid设为True,剩余支付金额减去当前记录原待付金额
    • 若剩余支付金额 < 当前记录待付金额:将当前记录to_pay减去剩余支付金额,剩余支付金额置为0,终止遍历
  • 遍历结束后返回剩余未使用金额和处理后的付款数据
完整实现代码
# 原始付款数据
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'}
    ]
}

def process_payment(payment_data, total_pay):
    remaining = total_pay
    # 按顺序遍历待付款列表
    for record in payment_data['payment_details']:
        if remaining <= 0:
            break
        current_to_pay = record['to_pay']
        if remaining >= current_to_pay:
            # 全额抵扣当前记录
            record['to_pay'] = 0
            record['paid'] = True
            remaining -= current_to_pay
        else:
            # 部分抵扣当前记录
            record['to_pay'] -= remaining
            remaining = 0
    # 返回剩余未使用的金额(如果有)和处理后的数据
    return remaining, payment_data

if __name__ == '__main__':
    # 接收用户输入并做合法性校验
    while True:
        input_str = input("请输入支付总金额:")
        try:
            total_pay = float(input_str)
            if total_pay < 0:
                print("支付金额不能为负数,请重新输入")
                continue
            break
        except ValueError:
            print("输入格式有误,请输入数字")
    
    remaining, processed_data = process_payment(payment_data, total_pay)
    
    # 输出处理结果
    print(f"\n抵扣完成,剩余未使用金额:{remaining:.2f}")
    print("处理后的付款记录:")
    for record in processed_data['payment_details']:
        print(record)
测试示例

输入支付总金额为15000时,输出结果如下:

抵扣完成,剩余未使用金额:0.00
处理后的付款记录:
{'name': 'X', 'to_pay': 0, 'paid': True, 'date': '2021-09-28'}
{'name': 'X', 'to_pay': 2000, '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'}

内容的提问来源于stack exchange,提问作者mr-noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:27:03