2014-09-21 86 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