如何将列表值赋值给字典列表指定嵌套键,规避浅拷贝导致的赋值错误
问题根因
你遇到的是字典浅拷贝的引用共享问题:Python内置的dict.copy()方法执行浅拷贝,仅复制最外层字典对象,内层嵌套的key1、key2对应的字典为所有拷贝实例共享的同一个对象,因此修改任意一个实例的嵌套键值,所有实例都会同步变更。
注:不要用list作为变量名,会覆盖Python内置的list类型,下文统一替换为values
方案1:深拷贝生成字典列表(改动最小)
用copy模块的deepcopy替换浅拷贝,保证嵌套层级的字典也都是独立实例,原有赋值逻辑无需修改:
import copy values = [value1, value2, value3] base_dict = {"key1": {"key2":{"key3": None}}} # 深拷贝生成完全独立的字典实例 dictionaries = [copy.deepcopy(base_dict) for _ in range(len(values))] # 原有遍历赋值逻辑可直接使用 for d, val in zip(dictionaries, values): d['key1']['key2']['key3'] = val
方案2:直接构造字典列表(无额外依赖)
如果不想引入深拷贝,可直接在生成列表时构造独立的嵌套字典,从根源避免引用共享:
values = [value1, value2, value3] dictionaries = [{"key1": {"key2": {"key3": None}}} for _ in range(len(values))] for d, val in zip(dictionaries, values): d['key1']['key2']['key3'] = val
极简一行实现
如果字典结构固定,可直接在生成列表时完成赋值,无需额外遍历步骤:
values = [value1, value2, value3] dictionaries = [{"key1": {"key2": {"key3": val}}} for val in values]
内容的提问来源于stack exchange,提问作者Silver137
相关产品推荐
相关产品推荐

