あなたは再帰的にこのようにこの問題を解決することができます
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を表し、辞書を提供する必要がありますパラメータ。あなたが選択した道
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)
はあなた次第です。そうでなければ、あなたもこのような新しい_id
を生成するために、すべてのノードのために呼び出される関数を有する第二の辞書を置き換えることができます。
最後に、あなたがこのように最初のバージョンを呼び出すことができます。
idUpdate = {"uuid1":"ooid1", "uuid2":"ooid2", "uuid3":"ooid3",
"uuid4":"ooid4", "uuid5":"ooid5", "uuid6":"ooid6"}
updateData(data, idUpdate)
と、このような第二1:ここでは
def newIdGenerator(oldID):
return the_new_id
updateData(data, newIdGenerator)
新しいIDはすべてのIDで同じですか? –
はい、 '_id'キーを探しているすべての要素にアクセスし、更新してください。 –
いいえ、私は新しいuuidsを生成しません。どのようにすべてのネストされた辞書や配列をトラバースできますか? – bluewa