我有一個像下面一段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