我有一個循環,我在其中編輯json對象並將其附加到列表中。但是,外循環,所有舊元素的值被更改爲新的一個
我的問題是類似這裏this一個,但我仍然無法找到一個解決我的問題。list.append()將每個變量替換爲新的變量
這是我的代碼:
json_data = open(filepath).read()
data = json.loads(json_data)
dataNew=[]
#opening file to write json
with open(filepath2, 'w') as outfile:
for i in range(50):
random_index_IntentNames = randint(0,len(intent_names)-1)
random_index_SessionIds = randint(0,len(session_id)-1)
timestamp = strftime("%Y-%m-%d %H:%M:%S", gmtime())
data["result"]["metadata"]["intentName"] = intent_names[random_index_IntentNames]
data["sessionId"]=session_id[random_index_SessionIds]
data["timestamp"] = timestamp
dataNew.append(data)
json.dump(dataNew, outfile, indent=2)
'data'是一個字典對象。每次添加對同一對象的引用,所以如果更改字典,則更改將反映在整個列表中(列表中的每個條目都指向相同的單個字典)。你需要附加dict的深層副本,以便它們不是內存中的同一個對象。這基本上就是你所說的答案。 – roganjosh
嗨@roganjosh。我是Python編程的初學者,這就是爲什麼我不完全明白你的觀點。如果您有解決方案,您是否可以對我的代碼進行更改,以便按照要求工作? –