2013-04-11 27 views
1

Python新手在這裏。我有一個列表的字典,像這樣:如何迭代包含列表和刪除項目的字典值?

d = { 
    1: ['foo', 'foo(1)', 'bar', 'bar(1)'], 
    2: ['foobaz', 'foobaz(1)', 'apple', 'apple(1)'], 
    3: ['oz', 'oz(1)', 'boo', 'boo(1)'] 
} 

我試圖通過字典的鍵和相應的列表值弄清楚如何循環,並用括號尾刪除所有的字符串中的每個列表。到目前爲止,這是我:

for key in keys: 
    for word in d[key]...: # what else needs to go here? 
     regex = re.compile('\w+\([0-9]\)') 
     re.sub(regex, '', word) # Should this be a ".pop()" from list instead? 

我想用一個列表理解來做到這一點,但正如我所說的,我無法找到通過字典鍵循環和相應的列表字典值多的信息。什麼是最有效的設置方法?

+0

你會碰到這個問題不是特有的碰巧是列表字典值。您應該通過搜索諸如「在迭代時修改列表」等方式獲得有用的信息。然而,eumiro關於用修改來創建一個新字典的回答,而不是現場修改現有值的最終結果 - 運行這些問題。 – lvc 2013-04-11 13:07:23

+0

你的名單的項目,他們是字符串?或者一些對象? – Eric 2013-04-11 14:16:14

+0

@Eric他們是字符串。感謝您指出 - 編輯的例子。 – 2013-04-11 15:35:57

回答

7

您可以重新建立詞典,通過讓沒有括號僅元素:

d = {k:[elem for elem in v if not elem.endswith(')')] for k,v in d.iteritems()} 
1
temp_dict = d 
for key, value is temp_dict: 
    for elem in value: 
     if temp_dict[key][elem].find(")")!=-1: 
      d[key].remove[elem] 

在遍歷它,你不能編輯清單,讓您創建列表的副本temp_list,如果您在其中找到括號尾部,則從您的原始列表中刪除相應的元素。

1

或者,你可以不用重建的字典,這可能是最好,如果它是巨大的......

for k, v in d.iteritems(): 
    d[k] = filter(lambda x: not x.endswith(')'), v)