2016-12-31 154 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']]