如何复制字典元素并修改键值后重新添加至字典
实现字典复制、键名修改与值更新的方案
要从dict1生成目标dict2,核心是完成嵌套字典的独立复制、键名修改和指定列表值的更新,以下是两种实用实现方式:
方式一:使用深拷贝(通用型)
如果嵌套结构层级较多,用copy模块的深拷贝能确保新字典和原数据完全独立,避免后续修改互相影响:
import copy dict1 = {"top":{"left":[100],"right":[100],"down":[200]}} # 深拷贝原字典的top对应值,生成top1的数据 top1_data = copy.deepcopy(dict1["top"]) dict2 = {"top1": top1_data} # 再次深拷贝原数据,修改down列表的元素后生成top2的数据 top2_data = copy.deepcopy(dict1["top"]) top2_data["down"][0] += 100 # 针对down列表的第一个元素加100 dict2["top2"] = top2_data # 输出结果 print(dict2) # 输出:{'top1': {'left': [100], 'right': [100], 'down': [200]}, 'top2': {'left': [100], 'right': [100], 'down': [300]}}
方式二:手动复制(直观型)
如果嵌套层级简单,手动复制每个键对应的列表,更直观可控:
dict1 = {"top":{"left":[100],"right":[100],"down":[200]}} # 手动复制top的所有列表值,生成top1的数据 top1_data = { "left": dict1["top"]["left"].copy(), "right": dict1["top"]["right"].copy(), "down": dict1["top"]["down"].copy() } # 复制并修改down的值,生成top2的数据 top2_data = { "left": dict1["top"]["left"].copy(), "right": dict1["top"]["right"].copy(), "down": [val + 100 for val in dict1["top"]["down"]] } # 组合成目标字典dict2 dict2 = {"top1": top1_data, "top2": top2_data}
注意事项
- 不能直接用
top_data = dict1["top"]这种浅赋值,因为这样新字典和原字典会共享嵌套的列表对象,修改其中一个的down值会影响另一个。 - 如果
down对应的是单个数值而非列表,直接修改数值即可,不用处理列表的元素操作。
内容的提问来源于stack exchange,提问作者Br3xin
相关产品推荐
相关产品推荐

