如何正确更新Python嵌套字典中的列表值 解决多键同步修改问题
问题原因
你使用dict.fromkeys()初始化字典时,该方法会将你传入的第二个参数(也就是{key: [] for key in subkeys}生成的子字典)作为同一个引用对象绑定到所有的一级键上。也就是说target_dict['a']、target_dict['b']、target_dict['c']三个变量指向的是内存中同一个子字典对象,修改任意一个一级键对应的子字典内容,所有一级键的子字典都会同步变化,这就是你看到赋值后所有二级键'1'都被修改的核心原因。
修正方案
不要用dict.fromkeys()生成嵌套字典,改用嵌套字典推导式实现,每次遍历一级键时都单独生成新的独立子字典,避免引用共享:
keys = ['a','b','c'] subkeys = ['1','2','3','4'] # 每个一级键对应独立的子字典实例 target_dict = {key: {subkey: [] for subkey in subkeys} for key in keys}
修改完成后再执行target_dict['a']['1'] = 1,就只会修改一级键a对应的子字典内容,其余一级键的子字典不会受影响,运行结果符合预期:
{'a': {'1': 1, '2': [], '3': [], '4': []}, 'b': {'1': [], '2': [], '3': [], '4': []}, 'c': {'1': [], '2': [], '3': [], '4': []}}
内容的提问来源于stack exchange,提问作者maxmxn
相关产品推荐
相关产品推荐

