就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