Python : 通过循环添加子节点
Python : add child node through loop
如何通过循环添加子节点?我正在使用树视图。我已经定义了行数组。在这个Primary1,Primary2,Primary3是父节点。以及Primary1的Secpndary1子节点。 r[1]定义Primary或secondary,r[2]定义parent node name
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': []})
谁能帮帮我?
试试这个:
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']})
如何通过循环添加子节点?我正在使用树视图。我已经定义了行数组。在这个Primary1,Primary2,Primary3是父节点。以及Primary1的Secpndary1子节点。 r[1]定义Primary或secondary,r[2]定义parent node name
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': []})
谁能帮帮我?
试试这个:
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']})