基于键和值的嵌套词典条件递归搜索

就SQL而言,我正在尝试基于查询中使用的表来构建依赖图。我设法将它们解析到一个嵌套字典中,深度根据子查询的嵌套程度和嵌套字典的每个块可能不同而定。给出下面的例子:

sql = {"select":{"value":"some value"},
       "from":[{"value":"table1","name":"a"},
               {"value":{"select":{"value":"*"},
                         "from":{"value":"table2","name":"b"}}}]}

预期输出为:

["table1","table2"]

我最初的方法是使用以下命令递归搜索from键:

def recurd(d, find = ['from']):
    if isinstance(d, list):
        for i in d:
            yield from recurd(i)
    elif isinstance(d, dict):
        for k,v in d.items():
            if any(i in k for i in find):
                yield v
        for j in d.values():
            yield from recurd(j)

输出如下:

[{'value': 'table1', 'name': 'a'}, {'value': {'select': {'value': '*'}, 'from': {'value': 'table2', 'name': 'b'}}}]
{'value': 'table2', 'name': 'b'}

虽然这是意料之中的,但我发现基于key和value递归返回我想要的值是非常令人困惑的。我已经尝试过了,但似乎大多数适用于嵌套字典的递归示例都只查看键,类似于我上面的示例。

转载请注明出处:http://www.fuqingkongyaji.com/article/20230507/1121847.html