2014-10-27 50 views
0

我有一个树状结构,类似的列表: 公司 - >系 - >角色 - >转换树列表

我有一个三重的环结构是这样的:

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()函数返回一个像Android-Sales这样的dept名称。公司可以有零个或多个部门。

到目前为止,以上是我所拥有的。我正在努力开发这个,所以我可以得到一份清单: 理想情况下,这是我想要的。如果重复,列表中的下一项应该保留空白。或者它可能没有一个字段,在这种情况下,也不要留下空白。

[
[ '谷歌', 'Android的销售', '营销', 'A123'],
[ '', '谷歌播放', '开发者', 'A435']
['','','Tester','A125'],
['','','','A126'],
['My Small Company','','Super Role ”, 'A123'] ]

或者这样的工作太...

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

每个内部列表应当是长度为4

回答

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']] 
+1

相反类型的'(sub_tree [键] )== dict'使用'isinstance(sub_tree [key],dict)'会让Pythonic更容易使用任何合适的映射对象来保存树数据结构。 – martineau 2014-10-27 21:04:17

+0

这是一个很好的观点。我更新了我的答案。 – RPGillespie 2014-10-28 15:36:03

+0

有太多的sept可以做到这一点。我给了一个小样本。实际上可以有50家公司,每家有1-50个部门。 – sarit 2014-10-29 02:26:47