从2个字典python 3中删除项目

时间:2014-01-18 20:14:58

标签: python python-3.x dictionary

我有以下词典:

a = {'f': 2, 'u': 210, 'the': 100, 'too': 300, 'my': 199, 'is': 2466, 'and': 3787}
b = {'f': 9, 'u': 17, 'o': 14, 'the': 23, 'yy': 7, 'and': 12}

我想从两个词典中删除类似的键。

我有以下代码:

    for item in a:
        if item in b.keys():
            del a[item]

代码类似于修改字典b。

当我运行它时,我收到以下错误:

 Traceback (most recent call last):
  File "None", line 4, in <module>
builtins.RuntimeError: dictionary changed size during iteration

有没有办法解决这个问题而不使用deepcopy,dict.has_key,zip或任何模块?此外,词典可以是任何长度。

2 个答案:

答案 0 :(得分:2)

是的,你可以迭代list(dict)。这将返回一个键列表。在Python2中,您还可以使用dict.keys()

for item in list(a):
    if item in b:   #Don't use b.keys() here, it is slow.
        del a[item]

答案 1 :(得分:1)

您可以使用dictionary comprehension

>>> a = {'f': 2, 'u': 210, 'the': 100, 'too': 300, 'my': 199, 'is': 2466, 'and': 3787}
>>> b = {'f': 9, 'u': 17, 'o': 14, 'the': 23, 'yy': 7, 'and': 12}
>>> a = {k:v for k,v in a.items() if k not in b}
>>> a
{'is': 2466, 'my': 199, 'too': 300}
>>>