2017-11-25 1 views
0

루프를 통해 자식 노드를 추가하는 방법? treeView를 사용하고 있습니다. 행 배열을 정의했습니다. 이 Primary1에서 Primary2, Primary3은 부모 노드입니다. 그리고 Primary1의 Secpndary1 자식 노드. r [1]은 1 차 또는 2 차를 정의하고 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': []}) 

아무도 도와 줄 수 있습니까?

답변

1

이 시도 :

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': []}) 
0

이 작동 할 수있는 또 다른 솔루션입니다.

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']})