Python:通过循环添加子节点

2024-10-04 11:22:51 发布

您现在位置:Python中文网/ 问答频道 /正文

如何通过循环添加子节点?我正在使用treeView。我定义了行数组。在这个Primary1,Primary2,Primary3是父节点。和Primary1的Secpndary1子节点。r[1]定义主节点或辅助节点,r[2]定义父节点名称

rows = [('Primary1', 'Primary', None), ('Primary2', 'Primary', None),
        ('Secpndary1', 'Secondary', 'Primary1'),('Primary3', 'Primary', None)]


tree = []

for r in rows:
    tree.append({'node_id': r[1], 'children': []})

有人能帮我吗?在


Tags: 名称nonetree节点定义数组rowstreeview
2条回答

试试这个:

rows = [('Primary1', 'Primary', None), ('Primary2', 'Primary', None),
    ('Secpndary1', 'Secondary', 'Primary1'),('Primary3', 'Primary', None)]


tree = []

for r in rows:
    if r[2] is None:
        tree.append({'node_id': r[0], 'children': []})
for r in rows:
    if r[2] is not None:
        for node in tree:
            if node['node_id'] == r[2]:
                node['children'].append({'node_id': r[0], 'children': []})

这是另一个可行的解决方案。在

rows = [('Primary1', 'Primary', None), ('Primary2', 'Primary', None),
        ('Secpndary1', 'Secondary', 'Primary1'),('Primary3', 'Primary', None), ('Secondary2', 'Secondary', 'Primary1')]

from collections import defaultdict
dd = defaultdict(list)
for row in rows:
    node , _ , child = row
    x = dd[child].append(node) if child else dd[node]

print dd

>>> dd
defaultdict(<type 'list'>, {'Primary2': [], 'Primary3': [], 'Primary1': ['Secpndary1', 'Secondary2']})

相关问题 更多 >