将树转换为列表列表

时间:2014-10-27 20:00:44

标签: python list tree

我有一个树形结构,如: 公司 - >部门 - >角色 - >

我有一个三重循环结构,如下所示:

for company in self.Companies():
    cName = company.Name()
    for dept in company.Departments():
        dName = department.Name()
        for role in dept.Roles():
            rName = role.Name()
            roleID = role.ID()

.Name()函数返回一个dept名称,如Android-Sales。公司可以零或多个部门。

到目前为止,以上就是我的全部。我正在尝试开发这个,所以我可以得到一个列表列表: 理想情况下,这就是我想要的。如果重复某些事情,列表中的下一个项目应该留空。或者它可能没有字段,在这种情况下也将它留空。

  

[
    ['Google','Android-Sales','营销商','A123'],
    ['','Google-Play','开发','A435'],
    [ '', '', '测试', 'A125'],
    [ '', '', '', 'A126'],
    ['我的小公司','','超级角色','A123']     ]

或者这也会起作用......

  

[
    ['Google','Android-Sales','营销商','A123'],
    ['Google','Google-Play','开发','A435'],
    [ '谷歌', '谷歌播放', '测试', 'A125'],
    [ '谷歌', '谷歌播放', '测试', 'A126'],
    ['我的小公司','','超级角色','A123'](这里“我的小公司”没有>部门。    ]

每个内部列表的长度应为4。

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

tree = {"Google":{"Android":"yes", "Nexus":"no"}}
list_of_lists = []

def listbuilder(sub_tree, current_list):
    for key in sub_tree:
        if isinstance(sub_tree[key], dict):
            listbuilder(sub_tree[key], current_list + [key])
        else:
            list_of_lists.append(current_list + [key] + [sub_tree[key]])

listbuilder(tree,[])

print str(list_of_lists)

输出:

[['Google', 'Nexus', 'no'], ['Google', 'Android', 'yes']]