我有以下词典:
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或任何模块?此外,词典可以是任何长度。
答案 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}
>>>