在我的代码中,我遍历字典中的键,如果键匹配条件(存在于另一个列表中),则删除键值对:
for key in my_dict:
if key in my_list:
del my_dict[key]
问题是,当我运行代码时出现错误:'字典在迭代期间更改了大小'。我意识到我不能这样做:
for i in range(len(my_dict)):...
因为我的字典中的关键索引会随着每次删除而改变。
有没有办法在不引发错误的情况下删除字典中的元素?
在我的代码中,我遍历字典中的键,如果键匹配条件(存在于另一个列表中),则删除键值对:
for key in my_dict:
if key in my_list:
del my_dict[key]
问题是,当我运行代码时出现错误:'字典在迭代期间更改了大小'。我意识到我不能这样做:
for i in range(len(my_dict)):...
因为我的字典中的关键索引会随着每次删除而改变。
有没有办法在不引发错误的情况下删除字典中的元素?
没有必要遍历 dict 中的所有键
for key in my_list:
my_dict.pop(key, None)
会做的。
pop
如果它存在,这里将删除该项目,但如果 my_list 中有一个不在字典中的键,则不会引发异常。
你不需要遍历你的字典。
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)
这个问题的答案需要复制字典。我相信你需要写一个小函数。看到这个线程。
您应该首先创建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