2014-09-21 87 views
-4

我有一本字典和一個列表。我想從字典中刪除出現在列表中的那些值(如果這些值出現在字典中)。這些元素可以多次出現在字典中。刪除Python字典中的某些元素

例如:
my_dic={'key1':['a','b','c'],'key5':['d','a','e']}
我想在不調用鍵(鍵1和鍵5)的情況下刪除值'a'和'c'。

我該怎麼辦?

+1

是什麼意思的東西存在於詞典嗎?字典是鍵值映射,而不是簡單的容器;目前還不清楚你是在看鑰匙還是價值觀,還是看什麼。 – user2357112 2014-09-21 07:14:40

+0

對不起,我不清楚。我指的是價值觀。這些步驟對我來說沒有用處,但我想保留它們,以備將來使用。 – 2014-09-21 07:18:06

+0

你能否給我提供你低估這個問題的理由? – 2014-09-21 07:35:48

回答

1

像這樣的事情,我認爲

lst = ['val1','val2','val3'] 
dct = { 
    'key1': ['val1','val6'], 
    'key2': ['val2','val45'], 
    'key3': ['val52','val48'] 
} 

for key in dct.keys(): 
    vals = dct[key] 
    for value in vals: 
     if value in lst: 
      while value in vals: 
       vals.remove(value) 
    dct[key] = vals 


print dct >>> {'key3': ('val52', 'val48'), 'key2': ('val45',), 'key1': ('val6',)} 
+0

如果一個值在* vals *中出現多次? – volcano 2014-09-21 08:04:49

+0

一個值只能在val中出現一次。它可以出現在更多vals列表中 – 2014-09-21 08:27:54

+1

您是否注意到_while_會使_if_變得冗餘? – volcano 2014-09-21 10:52:12

1
target_dict = {'key1':['a','b','c'],'key5':['d','a','e']} 
values_to_detele = ['a', 'c'] 
In [225]: for val_list in target_dict.itervalues(): 
    for del_val in values_to_detele: 
     while del_val in val_list: 
      val_list.remove(del_val) 
    .....:    

In [226]: target_dict 
Out[226]: {'key1': ['b'], 'key5': ['d', 'e']} 
+0

AttributeError:'dict'對象沒有屬性'itervalues' – 2014-09-21 08:28:29

+2

如果您使用Python 3,請改用'values'。 – Matthias 2014-09-21 10:37:35