0

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

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

问题是,当我运行代码时出现错误:'字典在迭代期间更改了大小'。我意识到我不能这样做:

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

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

有没有办法在不引发错误的情况下删除字典中的元素?

4

4 回答 4

1

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

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

会做的。

pop如果它存在,这里将删除该项目,但如果 my_list 中有一个不在字典中的键,则不会引发异常。

于 2013-07-11T15:48:38.700 回答
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)
于 2013-07-11T15:50:00.373 回答
0

这个问题的答案需要复制字典。我相信你需要写一个小函数。看到这个线程。

于 2013-07-11T15:38:45.040 回答
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
于 2013-07-11T15:44:52.473 回答