给定字典d和列表lst,从字典中删除其键是lst元素的所有元素。列表中不是字典键的任何元素都应添加到与变量not_found关联的新集合中。例如,给定字典{1:2,3:4,5:6,7:8}和列表[1,6,7],得到的字典将是{3:4,5:6}并且set not_found将包含6.
这就是我的代码:
not_found = ()
for i in d:
if d[i] in lst:
not_found.append(d[i])
del d[i]
答案 0 :(得分:4)
在迭代任何dict
时,您不希望删除它们。此外,您最好迭代lst
而不是字典d
以利用其常量时间查找。你现在这样做的方法是遍历dict然后遍历列表,每次。这不太理想。尝试类似的事情,
not_found = set()
for e in lst:
if e in d:
del d[e]
else:
not_found.add(e)
print d # {3: 4, 5: 6}
print not_found # set([6])
答案 1 :(得分:2)
在迭代它时从列表/字典中删除将导致您跳过项目。如果在迭代时尺寸发生变化,dict
会抱怨。
通常最好使用您需要保留的项目创建新的词典
在你的情况下,迭代lst
代替
>>> d = {1:2, 3:4, 5:6, 7:8}
>>> lst = [1, 6, 7]
>>> not_found = {k for k in lst if k not in d}
>>> for k in lst:
... if k in d:
... del d[k]
>>> d
{3: 4, 5: 6, 7: 8}
答案 2 :(得分:-2)
for i in lst:
if i in d:
del d[i]