我需要遍历字典并查看键是否在给定列表中

时间:2013-07-19 01:05:16

标签: python list loops dictionary

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

3 个答案:

答案 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]