递归地迭代嵌套的dict,并返回第一个匹配键的值

Yan*_*ick 2 recursion dictionary python-3.x

我有一个深层嵌套的dict,需要遍历它,并返回与key参数(函数的第二个参数)相对应的值。

例如,

tree = {"a": 12, "g":{ "b": 2, "c": 4}, "d":5}
Run Code Online (Sandbox Code Playgroud)

tree_traverse(tree, "d") 应该返回5

这是我的代码:

def tree_traverse(tree, key):
    for k,v  in tree.items():
        if isinstance(v, dict):
            tree_traverse(v, key)

        elif k == key:
            return v
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果函数在通过最深层的嵌套dict进行迭代后没有找到匹配的键,则该函数将返回None。我不希望它在找到匹配的键之前返回任何内容。

我没有在另一个线程中找到解决方案,其中大多数使用print语句并且不返回任何内容,因此我想它避免了这个问题。

sch*_*ggl 5

您必须检查递归调用是否确实找到了某些东西,以便您可以继续循环。例如,尝试以下操作:

def tree_traverse(tree, key):
    for k, v  in tree.items():
        if k == key:
            return v
        elif isinstance(v, dict):
            found = tree_traverse(v, key) 
            if found is not None:  # check if recursive call found it
                return found
Run Code Online (Sandbox Code Playgroud)