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

如何构建目标嵌套字典?循环赋值数据被覆盖问题求助

解决嵌套字典赋值时数据被覆盖的问题

这个问题我之前也踩过坑!核心原因是你复用了同一个dict_b字典对象——字典是可变对象,当你把dict_b赋值给dict_a的多个键时,这些键其实都指向同一个内存地址里的字典,最后一次修改dict_b时,所有外层键对应的内容都会被同步更新,看起来就像是“覆盖”了之前的数据。

正确的解决思路:每次循环创建新的内层字典

你需要确保每个外层键对应的内层字典都是独立的新对象,而不是复用同一个模板字典。下面给你两种实用的实现方式:

方式1:直接在循环内初始化内层字典

如果你的数据有规律(比如按起始数字生成列表),可以直接在遍历外层键时,动态生成新的内层字典:

# 定义外层键和对应的起始数字
outer_keys = ['abc', 'efg', 'hij']
start_numbers = [1, 10, 21]

dict_a = {}
for key, start in zip(outer_keys, start_numbers):
    # 每次循环都创建一个全新的内层字典
    inner_dict = {
        'a': list(range(start, start + 3)),
        'b': list(range(start + 3, start + 6)),
        'c': list(range(start + 6, start + 9))
    }
    dict_a[key] = inner_dict

print(dict_a)

方式2:复制模板字典后修改(适合已有模板的场景)

如果你一定要用dict_b作为模板,每次循环时需要复制模板字典(生成新对象),再对新字典赋值,而不是直接修改原模板:

dict_b = {'a': [], 'b': [], 'c': []}
outer_keys = ['abc', 'efg', 'hij']
# 准备好每个外层键对应的三个列表数据
all_data = [
    ([1,2,3], [4,5,6], [7,8,9]),
    ([10,11,12], [13,14,15], [16,17,18]),
    ([21,22,23], [24,25,26], [27,28,29])
]

dict_a = {}
for key, (a_list, b_list, c_list) in zip(outer_keys, all_data):
    # 复制模板字典,生成新的内层字典对象
    inner_dict = dict_b.copy()
    inner_dict['a'] = a_list
    inner_dict['b'] = b_list
    inner_dict['c'] = c_list
    dict_a[key] = inner_dict

print(dict_a)

关键知识点回顾

  • 可变对象(比如字典、列表)的赋值是引用传递:赋值后两个变量指向同一个内存对象,修改其中一个会影响另一个。
  • 要避免覆盖,必须为每个外层键创建独立的内层字典对象,不能复用同一个字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:06:51