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

Python循环处理嵌套字典子项时出现非预期输出如何解决?

问题成因

dict.fromkeys 方法传入的第二个默认值如果是可变对象(字典、列表、DataFrame等)时,不会为每个key单独创建独立的副本,而是所有key共享同一个对象的内存引用。你示例中所有ticker对应的子字典本质上是同一个字典,循环修改时每一次赋值都会覆盖上一次的结果,最终所有子字典的值都等于最后一次循环的赋值结果3。你实际场景中存储DataFrame出现覆盖,也是同样的原因:所有子字典引用的是同一个内存地址,最后一次写入的DataFrame自然会覆盖之前所有的写入结果。

修复方案

初始化字典时不要用dict.fromkeys传入可变默认值,改用字典推导式为每个key单独生成独立的子字典:

ticker = ["a","bb","ccc"]
# 字典推导式会为每个key创建新的子字典,互相独立
ticker_dict = {key: {"Var": []} for key in ticker}
for key in ticker_dict:
    ticker_dict[key]["Var"] = len(key)

运行后即可得到预期结果:

{"a":{"Var":1},
 "bb":{"Var":2},
 "ccc":{"Var":3}}

如果你要存储DataFrame,只要按照同样的逻辑初始化每个key对应的独立存储容器即可,不会再出现覆盖问题。

相关检索指引

站内同类问题可通过以下关键词搜索:

  • Python dict.fromkeys 可变对象 引用
  • Python 字典赋值覆盖 可变对象
  • Python 可变对象 初始化 共享引用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:57:04