如果在Python的新列表中找到,则从dict中删除

时间:2009-11-06 16:49:34

标签: python dictionary merge list

说我有一个包含任意数量值的字典。 然后我创建一个列表。 如果在字典中找到列表的任何值,无论它是键还是索引,如何删除完整值?

E.g:

dictionary = {1:3,4:5}
list = [1]
...
    dictionary = {4:5}

如何在不创建新词典的情况下执行此操作?

9 个答案:

答案 0 :(得分:6)

for key, value in list(dic.items()):
    if key in lst or value in lst:
        del dic[key]

无需创建单独的列表或字典。

我解释“它是否是一个键或一个索引”来表示“它是否是一个键或一个值[在字典中]”

答案 1 :(得分:4)

由于你的“价值观”要求,它有点复杂:

>>> dic = {1: 3, 4: 5}
>>> ls = set([1])
>>> dels = []
>>> for k, v in dic.items():
    if k in ls or v in ls:
        dels.append(k)

>>> for i in dels:
    del dic[i]

>>> dic
{4: 5}

答案 2 :(得分:1)

dictionary = {1:3,4:5}
list = [1]

for key in list:
  if key in dictionary:
     del dictionary[key]

答案 3 :(得分:1)

>>> dictionary = {1:3,4:5}
>>> list = [1]
>>> for x in list:
...     if x in dictionary:
...             del(dictionary[x])
... 
>>> dictionary
{4: 5}

答案 4 :(得分:1)

执行此操作的一个班轮将是:

[dictionary.pop(x) for x in list if x in dictionary.keys()]

答案 5 :(得分:0)

我会做类似的事情:

for i in list:
    if dictionary.has_key(i):
         del dictionary[i]

但我相信还有更好的方法。

答案 6 :(得分:0)

更多测试用例来定义我如何解释您的问题:

#!/usr/bin/env python

def test(beforedic,afterdic,removelist):
    d = beforedic
    l = removelist
    for i in l:
        for (k,v) in list(d.items()):
            if k == i or v == i:
                del d[k]

    assert d == afterdic,"d is "+str(d)

test({1:3,4:5},{4:5},[1])
test({1:3,4:5},{4:5},[3])
test({1:3,4:5},{1:3,4:5},[9])
test({1:3,4:5},{4:5},[1,3])

答案 7 :(得分:0)

如果字典足够小,那么创建一个新字典会更容易。从字典s中删除其密钥位于集d中的所有项目:

d = dict((k, v) for (k, v) in d.items() if not k in s)

从字典s中删除其键或值位于集d中的所有项目:

d = dict((k, v) for (k, v) in d.items() if not k in s and not v in s)

答案 8 :(得分:0)

def remKeys(dictionary, list):
    for i in list:
        if i in dictionary.keys():
            dictionary.pop(i)
    return dictionary