我有一个从Web API检索到的字典数组。每个字典都有一个name
,description
,parent
和children
键。 children
键有一个字典数组作为其值。为了明确起见,这里是一个虚拟示例:
[
{'name': 'top_parent', 'description': None, 'parent': None,
'children': [{'name': 'child_one'},
{'name': 'child_two'}]},
{'name': 'child_one', 'description': None, 'parent': 'top_parent',
'children': []},
{'name': 'child_two', 'description': None, 'parent': 'top_parent',
'children': [{'name': 'grand_child'}]},
{'name': 'grand_child', 'description': None, 'parent': 'child_two',
'children': []}
]
数组中的每个项目。一个项目可能是最顶层的父级,因此不会存在于任何children
数组中。一个项目可能既是子级又是父级。或者一个项目可能只是一个子级(没有自己的子级)。
所以,在树形结构中,你会有类似这样的东西:
top_parent
child_one
child_two
grand_child
在这个人为简化的例子中,
top_parent
是一个父节点但不是子节点;child_one
是一个子节点但不是父节点;child_two
是一个既是父节点也是子节点的节点;grand_child
是一个子节点但不是父节点。这涵盖了所有可能的状态。我想要做的是能够遍历一次字典数组并生成一个正确表示树结构的嵌套字典(如果只能遍历一次,则以最有效的方式)。因此,在这个例子中,我会得到一个像这样的字典:
{
'top_parent': {
'child_one': {},
'child_two': {
'grand_child': {}
}
}
}
严格来说,没有子项的条目不需要不作为键,但这是更可取的。