我有一个像下面一段Python代码(我很抱歉,我不能贴上我的实际代码,因为它非常大)添加字典的值到另一个字典被覆盖以前的值
final_dict = {}
default_dict = some_data
for dict in list_of_dicts:
# I am getting list_of_dicts from a json file
resultant_dict = merge_dicts(dict, default_dict)
id = return_value_from_a_function(resultant_dict)
final_dict[id] = resultant_dict # id will be different in each loop
所以final_dict应该有id的键和作为values的结果_dict。我的问题是,在for循环结束时,final_dict中的所有值都与result_dict的最后一个值相同。我认为它覆盖了以前的值(可能是因为它是一个参考)。如何解决这个问题..?
编辑1:merge_dicts实际上创建两个字典的联合。当我打印句号时,它会按预期打印不同的字典。但是,当我将它赋值为final_dict时,它将使用最新的值修改所有以前的值。
编辑2:所有的输入数据是一个字典,我从json文件中获得。最终的字典应该类似于下面
final_dict = {
id1 : dict1,
id2 : dict2
}
但我越来越喜欢以下(这是覆盖所有最新的字典值的值)
final_dict = {
id1 : dict2,
id2 : dict2
}
编辑3:这是merge_dicts如何工作
def merge_dicts(tmp1, tmp2):
'''
merges tmp2 into tmp1
'''
for key in tmp2:
if key in tmp1:
if isinstance(tmp1[key], dict) and isinstance(tmp2[key], dict):
merge_dicts(tmp1[key], tmp2[key])
else :
tmp1[key] = tmp2[key]
else:
tmp1[key] = tmp2[key]
return tmp1
'merge_dicts'是做什么用的?你处理什么输入数据?输出数据最终应该是什么样子?请提供这些详细信息以确保你有一个好的[mcve] – idjaw
我怀疑你的'merge_dict'函数正在修改'default_dict'并将其返回 –
你可以*请给出实际的例子来帮助更好地说明它是怎么回事你的代码? – idjaw