如何搜索嵌套的dict /数组结构在python中添加一个子句?

时间:2013-01-17 04:20:45

标签: python

如果我有以下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": []
    }
    ]
    },
         ]
    }

最好的方法是什么?我不知道如何/如果有可能搜索现有的字典结构,在嵌套字典的多个级别内搜索以适当地插入新的字典之前,请帮助。

1 个答案:

答案 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的递归过程的递归调用。