如何在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
相关产品推荐
相关产品推荐

