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

如何在Python循环中动态创建嵌套保单列表并避免数据覆盖

解决Python脚本中保单详情被覆盖的问题

核心问题原因

你之前的代码每次循环都会直接给policies details赋值单个保单字典,导致后续保单数据覆盖之前的,所以只保留最后一条。要解决这个问题,需要先按customer_id分组,把每个客户的所有保单详情收集到列表中。

修改后的代码示例

方案一:使用collections.defaultdict简化分组

from collections import defaultdict

# 假设你的原始数据结构类似这样
data = [
    {"attributes": {"customer_id": "C001", "Policy_No": "P001", "Company_ID": "COM1", "Branch_ID": "B001", "Receipt_No": "R001"}},
    {"attributes": {"customer_id": "C001", "Policy_No": "P002", "Company_ID": "COM1", "Branch_ID": "B001", "Receipt_No": "R002"}},
    {"attributes": {"customer_id": "C002", "Policy_No": "P003", "Company_ID": "COM2", "Branch_ID": "B002", "Receipt_No": "R003"}}
]

# 1. 按customer_id分组所有保单详情
customer_policies = defaultdict(list)
for item in data:
    attrs = item["attributes"]
    # 提取当前保单的所有关联属性
    policy_detail = {
        "Policy_No": attrs["Policy_No"],
        "Company_ID": attrs["Company_ID"],
        "Branch_ID": attrs["Branch_ID"],
        "Receipt_No": attrs["Receipt_No"]
    }
    # 将保单详情追加到对应客户的列表中
    customer_policies[attrs["customer_id"]].append(policy_detail)

# 2. 生成最终结果
result = []
for customer_id, policies in customer_policies.items():
    customer_info = {
        "customer_id": customer_id,
        "policies details": policies  # 这里是包含所有保单的列表
    }
    result.append(customer_info)

# 查看输出
import json
print(json.dumps(result, indent=2))

方案二:不使用额外库的手动分组

如果你不想引入collections,可以用普通字典实现:

# 假设原始数据同上
customer_policies = {}
for item in data:
    attrs = item["attributes"]
    customer_id = attrs["customer_id"]
    policy_detail = {
        "Policy_No": attrs["Policy_No"],
        "Company_ID": attrs["Company_ID"],
        "Branch_ID": attrs["Branch_ID"],
        "Receipt_No": attrs["Receipt_No"]
    }
    # 检查客户是否已在字典中,没有则初始化空列表
    if customer_id not in customer_policies:
        customer_policies[customer_id] = []
    customer_policies[customer_id].append(policy_detail)

# 生成结果的代码和方案一一致
result = []
for customer_id, policies in customer_policies.items():
    result.append({
        "customer_id": customer_id,
        "policies details": policies
    })

输出效果

运行后会得到每个客户对应所有保单详情的嵌套列表,示例输出如下:

[
  {
    "customer_id": "C001",
    "policies details": [
      {
        "Policy_No": "P001",
        "Company_ID": "COM1",
        "Branch_ID": "B001",
        "Receipt_No": "R001"
      },
      {
        "Policy_No": "P002",
        "Company_ID": "COM1",
        "Branch_ID": "B001",
        "Receipt_No": "R002"
      }
    ]
  },
  {
    "customer_id": "C002",
    "policies details": [
      {
        "Policy_No": "P003",
        "Company_ID": "COM2",
        "Branch_ID": "B002",
        "Receipt_No": "R003"
      }
    ]
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:37:14