亲爱的 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、名称和子节点的节点树。在那种情况下,我认为它是清洁节点。
清理一个节点:
- 使用原始节点的名称和 ID 创建一个节点。
- 将新节点的子节点设置为原始节点子节点的清理版本。 (这是递归调用。)
在代码中,这将是:
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'}]
我发现像这样分解递归问题更容易 - 尝试使用全局变量会使简单的事情很快变得非常困惑。
我是一名优秀的程序员,十分优秀!