【发布时间】:2015-10-18 05:54:21
【问题描述】:
我有一个从 Web API 检索到的字典数组。每个 dict 都有一个 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 是孩子,但不是父母。这涵盖了所有可能的状态。
我想要的是能够迭代 dicts 数组 1 次并生成一个正确表示树结构的嵌套 dict(但是,它 1 次是不可能的,可能是最有效的方式)。所以,在这个例子中,我会得到一个看起来像这样的字典:
{
'top_parent': {
'child_one': {},
'child_two': {
'grand_child': {}
}
}
}
严格来说,没有子项的 item 没有必要不是 key,但这是更可取的。
【问题讨论】:
-
您想忽略最终字典中的名称和描述?
-
它们可以被忽略,但它们不需要。关键目标是正确表示对象的父子关系的嵌套字典。
-
名称是否保证唯一?
-
是的。名称将是唯一的。这是由网络服务保证的。
-
我猜 BFS 或 DFS 可以正常工作。每个节点只会被访问一次,您可以按照自己喜欢的方式将结果存储在字典中。
标签: python arrays dictionary tree