2016-12-31 98 views
1

我有一个生成的元组下面的列表中的程序:转换一个元组列表到深嵌套列表

[('Government and politics', 2), ('Government', 3), ('Capital punishment', 4), ('Federal representation', 4), ('Politics', 3)] 

其中数字反映的层次结构。我想知道是否有元组的这个列表转换成一个嵌套列表如下的递归的方式:

['Government and politics', ['Government', ['Capital punishment', 'Federal representation'], 'Politics']] 
+0

为什么不改变原有程序来生成你需要什么? – jtbandes

+0

这是一个较大的代码,旨在复制维基百科文章的标题(H1,H2,...)的一部分。目前的Wikipedia API提供了这些标题的平面列表。我在这里所能达到的目的就是尽可能地将它推向类似于等级结构。 – Alshafai

+0

好的。你为什么要使用递归?你有没有尝试过一个简单的循环? – jtbandes

回答

2

这是没有必要在这种情况下使用递归:

def nest(data, base=0): 
    result = [] 
    for item, level in data: 
     target = result 
     for depth in range(base, level): 
      if not (len(target) > 0 and isinstance(target[-1], list)): 
       target.append([]) 
      target = target[-1] 
     target.append(item) 
    return result 

的外环在item, level对数据中的这一功能迭代和内环演练升降到合适的深度,它会根据需要创建新的子列表。

base参数是数据中的最低水平,在这种情况下2。这是在行动:

>>> data = [ 
...  ('Government and politics', 2), 
...  ('Government', 3), 
...  ('Capital punishment', 4), 
...  ('Federal representation', 4), 
...  ('Politics', 3) 
... ] 

>>> nest(data, 2) 
['Government and politics', ['Government', ['Capital punishment', 'Federal representation'], 'Politics']]