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

如何合并字典列表中同doc与account_name的amount值?

合并字典列表中相同doc和account_name的amount字段

给定如下格式的字典列表:

[
    {
      "account_name": "Rounded Off (Purchase)",
      "amount": 0.28,
      "doc_date": "2023-04-05",
      "doc": "P.Inv.-1",
      "date_created": "2023-04-05T15:30:42.964203"
    },
    {
      "account_name": "Discount (Purchase)",
      "amount": 100,
      "doc_date": "2023-04-05",
      "doc": "P.Inv.-1",
      "date_created": "2023-04-05T15:30:42.964203"
    },
    {
      "account_name": "Discount (Purchase)",
      "amount": 86.4,
      "doc_date": "2023-04-05",
      "doc": "P.Inv.-1",
      "date_created": "2023-04-05T15:30:42.964203"
    }
]

需要将具有相同doc和account_name值的字典的amount字段求和合并,简化后的期望结果如下:

[
    {
      "account_name": "Rounded Off (Purchase)",
      "amount": 0.28,
      "doc_date": "2023-04-05",
      "doc": "P.Inv.-1",
      "date_created": "2023-04-05T15:30:42.964203"
    },
    {
      "account_name": "Discount (Purchase)",
      "amount": 186.4,
      "doc_date": "2023-04-05",
      "doc": "P.Inv.-1",
      "date_created": "2023-04-05T15:30:42.964203"
    }
]

简洁实现方案

可以用一个临时字典分组,以(doc, account_name)作为唯一键,遍历列表时累加对应amount,最后将字典值转为列表即可,无需多层循环和大量占位变量:

original_list = [
    {"account_name": "Rounded Off (Purchase)", "amount": 0.28, "doc_date": "2023-04-05", "doc": "P.Inv.-1", "date_created": "2023-04-05T15:30:42.964203"},
    {"account_name": "Discount (Purchase)", "amount": 100, "doc_date": "2023-04-05", "doc": "P.Inv.-1", "date_created": "2023-04-05T15:30:42.964203"},
    {"account_name": "Discount (Purchase)", "amount": 86.4, "doc_date": "2023-04-05", "doc": "P.Inv.-1", "date_created": "2023-04-05T15:30:42.964203"}
]

merged_dict = {}
for item in original_list:
    key = (item["doc"], item["account_name"])
    if key in merged_dict:
        merged_dict[key]["amount"] += item["amount"]
    else:
        # 复制item避免修改原数据
        merged_dict[key] = item.copy()

merged_list = list(merged_dict.values())
print(merged_list)

代码说明

  1. 用元组(doc, account_name)作为分组键,因为元组是可哈希类型,能作为字典的键
  2. 遍历原始列表时,若键已存在则累加amount,不存在则复制当前字典到分组中
  3. 最后将字典的所有值转为列表,得到合并后的结果

如果需要处理浮点数精度问题(比如累加后出现多位小数),可以用round()函数对amount进行处理,例如:

merged_dict[key]["amount"] = round(merged_dict[key]["amount"] + item["amount"], 2)

内容的提问来源于stack exchange,提问作者Sourabh Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:35:09