0

给定一个字典 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]
4

3 回答 3

5

您不想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])
于 2013-07-19T01:12:02.097 回答
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}
于 2013-07-19T01:11:10.543 回答
-2
for i in lst:
 if i in d:
  del d[i]
于 2018-11-15T20:00:05.380 回答