2012-05-30 99 views
0

給定一個列表n長,如['animal', 'dog', 'golden retriever']['food', 'dinner', 'pasta', 'white sauce', 'fetucci alfredo'],我需要遍歷數組並獲取當前索引,加上每個以前的索引。Python:循環遍歷一個列表使用所有索引與每個索引

是否有過什麼好辦法循環,做到這一點,使得任意長度的列表仍然可以變成:

stuff['food'] 
stuff['food']['dinner'] 
stuff['food']['dinner']['pasta'] 
stuff['food']['dinner']['pasta']['white sauce'] 
stuff['food']['dinner']['pasta']['white sauce']['fetucci alfredo'] 

我越來越深的移動到一個對象,但每個值可能可能還不存在,所以我需要在每個級別停下來。即stuff['food']['dinner']可能存在,但我可能仍然需要添加意大利麪到晚餐,白醬到意大利麪等。

+0

我是否正確地假設您想要以特定的嚴格等級方式關聯數據?如果是這樣,僅僅依次引用列表元素可能並不理想;字典數據類型可能是你需要的。這將允許您將嵌套字典關聯:例如,將意大利麪食品列表作爲與食品類別關聯的一個項目。 – abought

+0

是的,非常正確。由於觸發此代碼的API如何定義結構,我必須使用列表。我還必須在訪問器中定義整個層次結構;我寫的以前的版本確實只使用了父母/孩子(例如,意大利麪食列表作爲與食品類別相關的一個項目),但如果您有多個相同項目名稱/不同項目對父/子:例如[人,史密斯,史蒂夫,艾倫]和[姓名,S名,史密斯,史蒂夫] – BrianFreud

回答

5

這是什麼?

>>> lst = ['food', 'dinner', 'pasta', 'white sauce', 'fetucci alfredo'] 
>>> for i in range(len(lst)): 
... print lst[:i+1] 
... 
['food'] 
['food', 'dinner'] 
['food', 'dinner', 'pasta'] 
['food', 'dinner', 'pasta', 'white sauce'] 
['food', 'dinner', 'pasta', 'white sauce', 'fetucci alfredo'] 

因此,在每個循環的「臺階」,lst[:i+1]是你的「當前指數與以前所有的指數」,你可以做任何你想用它。

例如,你可以用它來索引到一些深度嵌套層次字典:

d = mydict 
for index in lst[:i+1]: 
    d = d[index] 
+0

謝謝,我認爲這可以做到這一點:) – BrianFreud

+0

你也可以使用拼寫'爲我在範圍內(1,len (lst)+1:'或'for i,_ in enumerate(lst,1):',這樣就不需要在循環內部執行fencepost運算了 – lvc

+0

再次感謝,這確實解決了它。 。:) – BrianFreud

0

我覺得它像一個樹數據結構

test = ['animal', 'dog', 'golden retriever'] 
tree = {} 
subtree = tree 
for x in test: 
    subtree = subtree.setdefault(x, {}) 

tree{'animal': {'dog': {'golden retriever': {}}}}

祝你好運!

相關問題