【问题标题】:Python : add child node through loopPython:通过循环添加子节点
【发布时间】:2017-11-25 14:25:33
【问题描述】:

如何通过循环添加子节点?我正在使用树视图。我已经定义了行数组。在这个Primary1,Primary2,Primary3 是父节点。和Primary1 的Secpndary1 子节点。 r[1] 定义 Primary 或 Secondary, 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': []})

谁能帮帮我?

【问题讨论】:

    标签: python python-2.7 kivy kivy-language


    【解决方案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': []})
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-06
        • 2013-10-01
        • 2013-05-25
        相关资源
        最近更新 更多