父子关系数据被转换为树结构

时间:2018-04-20 10:10:17

标签: python

我正在使用Python,我有一些数据,我想将其放入树格式并分配代码。这是一些示例数据:

[{'id': 1, '_id': '0', 'name': 'A1'},
 {'id': 2, 'fa_id': '1', 'name': 'B1'},
 {'id': 3, 'fa_id': '1', 'name': 'B2'},
 {'id': 4, 'fa_id': '2', 'name': 'C1'},
 {'id': 5, 'fa_id': '2', 'name': 'C2'},
 {'id': 6, 'fa_id': '3', 'name': 'C3'},
 {'id': 5, 'fa_id': '3', 'name': 'C4'}]

生成以下内容:

 [{'name': 'A1', 'children': [{'name': 'B1', 'children': [{'name': 'C1'}, {'name': 'C2'}]}, {'name': 'B2', 'children': [{'name': 'C3'}, {'name': 'C4'}]}]}]

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

在第一步中创建节点,然后链接它们:

>>> data = [{'id': 1, '_id': '0', 'name': 'A1'},
...  {'id': 2, 'fa_id': '1', 'name': 'B1'},
...  {'id': 3, 'fa_id': '1', 'name': 'B2'},
...  {'id': 4, 'fa_id': '2', 'name': 'C1'},
...  {'id': 5, 'fa_id': '2', 'name': 'C2'},
...  {'id': 6, 'fa_id': '3', 'name': 'C3'},
...  {'id': 7, 'fa_id': '3', 'name': 'C4'}]
>>> 
>>> by_id = {r['id']: ({'name': r['name']}, int(r.get('fa_id', 0))) for r in data}
>>> 
>>> for id, (node, parent) in by_id.items():
...     if parent:
...         by_id[parent][0].setdefault('children', []).append(node)
...     else:
...         root = node
... 
>>> root
{'name': 'A1', 'children': [{'name': 'B1', 'children': [{'name': 'C1'}, {'name': 'C2'}]}, {'name': 'B2', 'children': [{'name': 'C3'}, {'name': 'C4'}]}]}