gpt4 book ai didi

python - 从 "graph"(数据库)数据递归创建字典

转载 作者:行者123 更新时间:2023-12-01 07:51:26 24 4
gpt4 key购买 nike

A 有一个在 MySQL 数据库中映射的层次结构(我通过 Peewee 访问该数据库)。我正在尝试遍历数据以将其重新组装到嵌套字典中(以便最终转换为 XML)。

下面的函数将我的数据向下移动到父节点并打印出我想要在字典中构造的数据:

def build_dict(current):
query = (ParamLevel
.select()
# If we are looking for parents, we are matching on child
.join(ParamLevelParamLevels, JOIN.LEFT_OUTER, on = (ParamLevelParamLevels.parent == ParamLevel.id))
.where(ParamLevelParamLevels.child == current)
)

# If we have a parent node, recurse further
if query.exists():
parent = query.get()
build_dict(parent)
print('Current ParamLevel "%s" parent: "%s"' % ( current.name, parent.name ))
else:
print('Found root node: %s' % current.name)

这样做时,它会打印出以下内容:

Found root node: polycomConfig
Current ParamLevel "device" parent: "polycomConfig"
Current ParamLevel "device.dhcp" parent: "device"
Current ParamLevel "device.dhcp.bootSrvOptType" parent: "device.dhcp"

我正在寻找有关如何生成以下数据结构的输入:

{polycomConfig : { device : { device.dhcp : { device.dhcp.bootSrvOptType: {} } } } }

我确信这相当简单,但我对实现递归函数感到生疏。

谢谢!

最佳答案

使用 while 循环而不是递归来完成此操作,然后构建嵌套字典。在这种情况下,递归实际上没有任何好处。

def build_dict(current):
print(f'Found root node {current.name}')
temp_dict = {}
query = (ParamLevel
.select()
# If we are looking for parents, we are matching on child
.join(ParamLevelParamLevels, JOIN.LEFT_OUTER, on = (ParamLevelParamLevels.parent == ParamLevel.id))
.where(ParamLevelParamLevels.child == current)
)
while query.exists():
result = query.get()
temp_dict = {result.name: temp_dict}
query = (ParamLevel
.select()
# If we are looking for parents, we are matching on child
.join(ParamLevelParamLevels, JOIN.LEFT_OUTER, on = (ParamLevelParamLevels.parent == ParamLevel.id))
.where(ParamLevelParamLevels.child == result)
)

如果没有办法测试它,我无法给您输出,也无法检查是否有任何错误,但您应该了解它的要点。您想要的结果应该在 temp_dict 中。

我用这个测试了它:

d = {}
for i in range(5):
d = {i: d}
print(d)

输出:

{4: {3: {2: {1: {0: {}}}}}}

关于python - 从 "graph"(数据库)数据递归创建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56195066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com