gpt4 book ai didi

python - 如何从 JSON 递归地在 Python 中添加字典?

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:23 25 4
gpt4 key购买 nike

亲爱的 Stackoverflow 成员(member),

我有这个 JSON 数组,它包含以下项目(基本上):

{
{
'Name': 'x',
'Id': 'y',
'Unsusedstuff' : 'unused',
'Unsusedstuff2' : 'unused2',
'Children': []
},
{ 'Name' : 'xx',
'Id': 'yy',
'Unsusedstuff' : 'unused',
'Unsusedstuff2' : 'unused2',
'Children': [{
'Name': 'xyx',
'Id' : 'yxy',
'Unsusedstuff' : 'unused',
'Unsusedstuff2' : 'unused2',
'Children: []
}

您了解了基本概念。我想使用以下代码在 Python 列表中模拟这个(并且只获取 id、名称和结构):

names = []
def parseNames(col):
for x in col:
if(len(x['Children'])> 0):
names.append({'Name' : x['Name'], 'Id' : x['Id'], 'Children' : parseNames(x['Children'])})
else:
return {'Name' : x['Name'], 'Id' : x['Id']}

但是,它似乎只返回第一个“root”和第一个嵌套文件夹,但并没有循环遍历它们。

我该如何解决这个问题?

问候,

垫子

最佳答案

按照我的理解,您正在尝试将这棵树转换为一棵只有 ID、名称和子节点的节点树。在那种情况下,我认为它是清洁节点。

清理一个节点:

  1. 使用原始节点的名称和 ID 创建一个节点。
  2. 将新节点的子节点设置为原始节点子节点的清理版本。 (这是递归调用。)

在代码中,这将是:

def clean_node(node):
return {
'Name': node['Name'],
'Id': node['Id'],
'Children': map(clean_node, node['Children']),
}

>>> print map(clean_node, data)
[{'Name': 'x', 'Children': [], 'Id': 'y'}, {'Name': 'xx', 'Children': [{'Name': 'xyx', 'Children': [], 'Id': 'yxy'}], 'Id': 'yy'}]

我发现像这样分解递归问题更容易 - 尝试使用全局变量会使简单的事情很快变得非常困惑。

关于python - 如何从 JSON 递归地在 Python 中添加字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14626613/

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