您可以遞歸地解決這個問題是這樣的:
def updateData(data, newIDs):
for key in data:
if key == "_id":
if data[key] in newIDs:
data[key] = newIDs[data[key]]
if isinstance(data[key], dict):
updateData(data[key], newIDs)
你必須提供具有改變作爲第一個參數的字典,它代表了_id
S的應該改變爲第二字典參數。否則,你也可以更換第二字典,一個將被稱爲爲每個節點生成新_id
這樣的功能:
def updateData(data, idGenerator):
for key in data:
if key == "_id":
if data[key] in newIDs:
data[key] = idGenerator(data[key])
if isinstance(data[key], dict):
updateData(data[key], newIDs)
你選擇哪種方式取決於你。
最後,你可以調用這個方法的第一個版本:
idUpdate = {"uuid1":"ooid1", "uuid2":"ooid2", "uuid3":"ooid3",
"uuid4":"ooid4", "uuid5":"ooid5", "uuid6":"ooid6"}
updateData(data, idUpdate)
,第二個是這樣的:
def newIdGenerator(oldID):
return the_new_id
updateData(data, newIdGenerator)
新的uuid對每個id都是一樣的嗎? –
是的,訪問每個元素尋找'_id'鍵,然後更新... –
不,我會生成新的uuids。我如何遍歷所有嵌套字典和數組? – bluewa