在我的代码中,我遍历字典中的键,如果键匹配条件(存在于另一个列表中),键值对将被删除:
for key in my_dict:
if key in my_list:
del my_dict[key]
问题是,当我运行代码时,我收到一个错误:'字典在迭代期间改变了大小'。 我意识到我无法做到:
for i in range(len(my_dict)):...
因为我的字典中的关键索引会随着每次删除而改变。
有没有办法删除字典中的元素而不会引发错误?
答案 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