You need to enable JavaScript to run this app. Python遍历字典列表时如何复用已存在字典key 避免生成重复条目
优惠活动
大模型
产品
解决方案
定价
更多

Python遍历字典列表时如何复用已存在字典key 避免生成重复条目

原实现的核心问题

直接按原逻辑跑的话,会出现两个硬伤:

  • 每遍历一条源数据,都会全新生成一套用户字典和依赖字典,完全没有校验同名用户是否已经存在,每轮都把新字典直接塞到结果列表里,自然会把同一个Alice拆成两个独立顶层条目
  • 依赖项的键写死成了字符串"dep_name",实际生成的键名不会替换成真实的依赖人名称(Pammy/Trudyl),和预期的嵌套结构不符
修正实现思路

核心是把顶层结构从“每轮新建字典再塞列表”,改成“以用户名为唯一键的字典存储”,从结构上杜绝同名重复:

  • 初始化一个以用户名为键的顶层字典,用来存所有用户的公共属性
  • 每读取一条源记录,先检查这条记录对应的用户是否已经在顶层字典里:
    • 如果是第一次遇到这个用户:才初始化他的预留待填充属性(NEWKEY、ANOTHERKEY),同时建一个空的DEPENDENTS容器
    • 如果用户已经存在:不重置公共属性,直接操作已有的用户节点
  • 把当前记录对应的依赖人信息,以真实的依赖人名字为键,追加到对应用户的DEPENDENTS容器下
可运行修正代码
from collections import defaultdict

# 顶层结构以用户名为键,从结构上避免同名重复
user_grouped_result = defaultdict(dict)

for row in names:
    uname = row["name"]
    # 仅首次遇到该用户时初始化基础属性
    if uname not in user_grouped_result:
        user_grouped_result[uname] = {
            "NEWKEY": None,  # 预留待后续填充
            "ANOTHERKEY": None,  # 预留待后续填充
            "DEPENDENTS": {}
        }
    # 按真实依赖人名称写入嵌套结构
    dep_name = row["dep_name"]
    user_grouped_result[uname]["DEPENDENTS"][dep_name] = {
        "is_minor": row["is_dep_minor"],
        "is_insured": row["is_insured"]
    }

如果最终需要顶层是列表格式(和原代码的输出形态一致),只需要在循环结束后做一次转换即可:

final_output = [{uname: attrs} for uname, attrs in user_grouped_result.items()]
输出匹配效果

运行后得到的user_grouped_result["Alice"]结构和预期的目标完全一致:仅保留一份公共属性,两个依赖人Pammy、Trudyl都整合在同一个DEPENDENTS字段下;Bob对应的节点也会正常生成,包含关联的依赖人Charlie。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 08:54:03