編輯隨着問題解釋好一點,我認爲以下可能是你需要的,或至少可以提供一些起點。
data = {
'section-a.html':{'contents':'section-b.html section-c.html section-d.html'},
'section-b.html':{'contents':'section-d.html section-e.html'},
'section-c.html':{'contents':\
'product-a.html product-b.html product-c.html product-d.html'},
'section-d.html':{'contents':'product-a.html product-c.html'},
'section-e.html':{'contents':'product-b.html product-d.html'},
'product-a.html':{'contents':''},
'product-b.html':{'contents':''},
'product-c.html':{'contents':''},
'product-d.html':{'contents':''}
}
def findSingleItemInData(item):
return map(lambda x: (item, x), \
[key for key in data if data[key]['contents'].find(item) <> -1])
def trace(text):
searchResult = findSingleItemInData(text)
if not searchResult:
return text
retval = []
for item in searchResult:
retval.append([text, trace(item[-1])])
return retval
print trace('product-d.html')
OLD
我真的不知道,你希望看到什麼,但也許像 這會工作。
data = {
'page-a':{'contents':'page-b page-c'},
'page-b':{'contents':'page-d page-e'},
'page-c':{'contents':'item-a item-b item-c item-d'},
'page-d':{'contents':'item-a item-c'},
'page-e':{'contents':'item-b item-d'}
}
itemToFind = 'item-c'
for key in data:
for index, item in enumerate(data[key]['contents'].split()):
if item == itemToFind:
print key, 'at position', index
它會更容易,我覺得更多的是正確的,如果你使用略有不同 數據結構:
data = {
'page-a':{'contents':['page-b', 'page-c']},
'page-b':{'contents':['page-d', 'page-e']},
'page-c':{'contents':['item-a', 'item-b item-c item-d']},
'page-d':{'contents':['item-a', 'item-c']},
'page-e':{'contents':['item-b', 'item-d']}
}
然後,你就不會需要拆分。
鑑於去年的情況下,它甚至可以表達短一點:
for key in data:
print [ (key, index, value) for index,value in \
enumerate(data[key]['contents']) if value == 'item-c' ]
甚至更短,與空列表中刪除:
print filter(None, [[ (key, index, value) for index,value in \
enumerate(data[key]['contents']) if value == 'item-c' ] for key in data])
這應該是一個單一的線,但我使用\作爲換行符指示符,因此它可以被讀取爲 而不使用滾動條。
我真的不知道你的意思。你能舉個例子嗎?爲什麼你使用字符串作爲內容,而不是列表['item-a','item-b']? – extraneon 2009-11-27 17:02:59
字符串是數據如何提供給我的。因爲我可以使用。split()在一個字符串上,我不認爲我必須使用一個列表。舉一個例子:我幾乎只是尋找一個網站地圖(各種)。如果這沒有幫助,我可以嘗試給你真實的數據。 – gibson 2009-11-27 17:09:48
'item-a'會返回什麼?它似乎是在頁面c和頁面d? – nosklo 2009-11-27 17:16:40