迭代并更新python词典不起作用

时间:2017-01-13 02:10:40

标签: python dictionary copy

尝试迭代字典并相应地更新其值。出于某种原因,我无法让它发挥作用。我在下面创建了一个简单示例。它将最后一次迭代的'id'保存到字典中的两个键值。

示例代码为:

import copy

#####
def setParams(params):
    for key,valuesDict in params.items():
        print(key)
        params[key]['target']['id'] = key

targetDict = {'id':"",'value':0}
myParamsTemplate = {'target':targetDict}
first = copy.copy(myParamsTemplate)
second = copy.copy(myParamsTemplate)


params = {"1":first,"2":second}

print("before:\n",params)

setParams(params)

print("after:\n",params)

打印出来:

before:
 {'1': {'target': {'id': '', 'value': 0}}, '2': {'target': {'id': '', 'value': 0}}}
1
2
after:
 {'1': {'target': {'id': '2', 'value': 0}}, '2': {'target': {'id': '2', 'value': 0}}}

'id'应分别为1和2,但两者的结果始终为'2'。

1 个答案:

答案 0 :(得分:1)

因为你只做一个浅拷贝(它不会复制最里面的字典)。您可以通过打印params["1"]["target"] is params["2"]["target"]轻松验证这一点,它应该返回True(这意味着它们是同一个对象)。

您可以使用copy.deepcopy

使其有效
first = copy.deepcopy(myParamsTemplate)
second = copy.deepcopy(myParamsTemplate)