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

嵌套字典未按预期更新:如何移除主键下的同名子键?

问题修复:避免嵌套字典中出现同名子键及共享字典问题

首先,你的代码存在两个核心问题导致输出不符合预期:

  • 使用dict.fromkeys(names, {})创建字典时,所有主键会共享同一个空字典对象,这意味着你修改任意一个主键的子字典,其他主键的子字典都会同步发生变化。
  • 虽然循环里判断了mainKey != subKey,但由于共享字典的特性,所有主键的子字典会累积所有符合条件的键,最终每个子字典都包含了所有元素(包括自身)。

修复后的基础版本代码

names = ['A', 'B', 'C']
payable = {main_key: {} for main_key in names}  # 为每个主键生成独立的空字典
for mainKey in payable.keys():
    for subKey in names:
        if mainKey != subKey:
            payable[mainKey][subKey] = 0
print(payable)

更简洁的写法(一步生成目标字典)

你可以直接用嵌套字典推导式完成,省去额外的循环步骤:

names = ['A', 'B', 'C']
payable = {
    main_key: {sub_key: 0 for sub_key in names if sub_key != main_key}
    for main_key in names
}
print(payable)

运行上述代码后,会得到你期望的输出:

{'A': {'B': 0, 'C': 0}, 'B': {'A': 0, 'C': 0}, 'C': {'A': 0, 'B': 0}}

关键说明

  • 字典推导式{main_key: {} for main_key in names}会为每个main_key创建全新的空字典,彻底解决了共享对象的问题。
  • 嵌套推导式中的if sub_key != main_key直接过滤掉与主键同名的子键,确保每个子字典只包含其余元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:02:28