如果我有以下python dict“mydict”:
mydict = {
"folder": "myfolder",
"files": [
{ "folder": "subfolder",
"files": []
},
{ "folder": "anotherfolder",
"files": [
{ "folder": "subsubfolder",
"files": []
},
{ "folder": "subotherfolder",
"files": []
}
]
},
]
}
如果我有另一个词典“newdict”,我怎么能这样做:
newdict = {
"folder":"newfolder"
"files":[]
}
如何/是否有可能写一个函数带两个参数(“当前字典要添加到”,“dict我要添加”,“foldername-to-insert-under”这样在调用函数后:
desiredfunction(mydict, newdict, "subsubfolder")
我希望该函数能够在现有的“mydict”中搜索相应的“files”数组以追加“newdict”。
mydict = {
"folder": "myfolder",
"files": [
{ "folder": "subfolder",
"files": []
},
{ "folder": "anotherfolder",
"files": [
{ "folder": "subsubfolder",
"files": [
{
"folder":"newfolder"
"files":[]
}
]
},
{ "folder": "subotherfolder",
"files": []
}
]
},
]
}
最好的方法是什么?我不知道如何/如果有可能搜索现有的字典结构,在嵌套字典的多个级别内搜索以适当地插入新的字典之前,请帮助。
答案 0 :(得分:0)
如果您知道数据结构的形状(嵌套级别,类型等的数量),您可以编写一个包含适当数量for循环的过程来迭代数据结构并找到密钥。
如果您不知道数据结构的形状,可以递归遍历数据结构,直到它为空或找到相应的键。
编辑:哦,你想在旧的dict中添加一个新的dict。我以为你想从旧的词典中添加一些东西给新词。
离。如果你想在dict中的'z'键下插入'something',你就知道dict在任何时候都会是什么样子,
example = {0: {'a': 'dummy'}, 1: {'z': 'dummy'}}
for thing1 in example:
for thing2 in thing1:
if thing2 == 'z':
example[thing1][thing2] = 'something'
如果您不知道dict的外观,或者您不想对for循环进行硬编码,
example = {0: {'a': 'dummy'}, 1: {'b': {'z': 'dummy'}}}
replacement = 'something'
path = [1, 'b', 'z']
parent = example
while path:
key = path.pop(0)
if path:
parent = parent[key]
else:
parent[key] = replacement
print example
其中path
可以作为参数传递给遍历dict的递归过程的递归调用。