删除字典中的键会停止循环并引发错误

时间:2013-07-11 15:18:42

标签: python dictionary key

在我的代码中,我遍历字典中的键,如果键匹配条件(存在于另一个列表中),键值对将被删除:

for key in my_dict:
    if key in my_list:
        del my_dict[key]

问题是,当我运行代码时,我收到一个错误:'字典在迭代期间改变了大小'。 我意识到我无法做到:

for i in range(len(my_dict)):...

因为我的字典中的关键索引会随着每次删除而改变。

有没有办法删除字典中的元素而不会引发错误?

4 个答案:

答案 0 :(得分:1)

没有必要遍历dict中的所有键

for key in my_list:
    my_dict.pop(key, None)

会这样做。

pop如果该项存在,则会删除该项,但如果my_list中的某个键不在dict中,则不会引发异常。

答案 1 :(得分:1)

您无需循环遍历字典。

lst  = ['4','8','15','16','23','42']
dct  = {'4':4, 'foo':'bar'}
keys = dct.keys()

for key in lst:
    if key in keys:
        dct.pop(key)

答案 2 :(得分:0)

这个问题的答案需要复制字典。你需要写一个我相信的小函数。请参阅this主题。

答案 3 :(得分:0)

您应首先创建 dict(my)

的副本
my = {2:5, 3:4, 7:9}
lst = [2,7]
del_my = dict(my)


for i in my:
    if i in lst:
        del del_my[i]


print del_my