2013-07-11 216 views
0

是否有可能爲列表創建嵌套過濾? 我有一個包含標籤列表的書籤列表。我想過濾具有特定標記的書籤。python嵌套列表過濾?

def filterListByTag(bookmarkList, tag): 
    filteredList = [] 
    #filter the list by single tag 
    for b in bookmarkList: 
     for t in b[1]: 
      if t == tag: 
       filteredList.append (b) 
    return filteredList 

我已經編寫了一個嵌套循環來實現這個,但有沒有pythonic的方式使用過濾器或[]如下? :-)

my_list = [i for i in my_list if i.attribute == value] 
filter(lambda x: x.attribute == value, my_list) 

如:我想獲得與標籤的所有書籤 「newcar-7席」

輸入的例子:

print myBookmarks.bookmarks[0] 
(u'http://qt-project.org/doc/qt-4.8/examples-itemviews.html', [u'Python'], u'Item Views Examples | Documentation | Qt Project', u'', datetime.datetime(2013, 7, 10, 13, 38, 9)) 

print myBookmarks.bookmarks[1] 
(u'http://qt-project.org/doc/qt-4.8/model-view-programming.html', [u'Python'], u'Model/View Programming | Documentation | Qt Project', u'', datetime.datetime(2013, 7, 10, 13, 36, 23)) 

print myBookmarks.bookmarks[4] 
(u'http://www.gebrauchtwagen.at/', [u'newcar-7-seats'], u'Gebrauchtwagen.at \u2013 Auto, Autos, Jahreswagen, Neuwagen, Oldtimer, Unfallwagen, Automarkt, Autob\xf6rse', u'', datetime.datetime(2013, 7, 9, 8, 37, 35)) 

print myBookmarks.bookmarks[5] 
(u'http://www.car4you.at/Gebrauchtwagen', [u'newcar-7-seats'], u'car4you | Gebrauchtwagen, Autos, Fahrzeuge und Motorr\xe4der kaufen und verkaufen', u'', datetime.datetime(2013, 7, 9, 8, 37, 25)) 

篩選列表 on

print myBookmarks.bookmarks[4] 
(u'http://www.gebrauchtwagen.at/', [u'newcar-7-seats'], u'Gebrauchtwagen.at \u2013 Auto, Autos, Jahreswagen, Neuwagen, Oldtimer, Unfallwagen, Automarkt, Autob\xf6rse', u'', datetime.datetime(2013, 7, 9, 8, 37, 35)) 

print myBookmarks.bookmarks[5] 
(u'http://www.car4you.at/Gebrauchtwagen', [u'newcar-7-seats'], u'car4you | Gebrauchtwagen, Autos, Fahrzeuge und Motorr\xe4der kaufen und verkaufen', u'', datetime.datetime(2013, 7, 9, 8, 37, 25)) 
+0

用這樣的即席數據結構很難說,你甚至沒有明確描述。你能告訴我們一個輸入和輸出的例子嗎?和/或使用'namedtuple'而不是列表的索引有特殊含義的列表? – millimoose

回答

1

這應該是等價的,

filteredList = [b for b in bookmarkList if tag in b[1]] 

我也覺得你的意思是你break後追加,否則你會得到數倍。