Python:如果在另一个字典中不存在键,如何从一个字典中删除键?

时间:2016-03-21 10:55:13

标签: python dictionary compare key del

我有两个词典,键为字符串,值为整数:

ground = {"url1":1,"url2":2,....}
prediction = {"url1":5,"url2":3,....}

我想要做的是删除预测中不存在的地面中的键。

我写了最让我头疼的事情:

for key in ground:        
    if key not in prediction:
        del ground[key]

并尝试了这个:

for key in ground:
    if not key in prediction.keys():
        del ground[key]

都没有奏效。我怎样才能实现目标?

3 个答案:

答案 0 :(得分:0)

循环显示dict并删除同一循环内的一个键。这就是为什么它可能不起作用的原因。尝试:

pred_set = set(prediction.keys())
g_set = set(ground.keys())
for key in g_set - pred_set:
    del ground[key]

答案 1 :(得分:0)

你的第二次尝试在Python 2中运行良好。在Python 3中,keys()是一个视图而不是一个列表,因此会产生与第一个相同的错误:字典在迭代期间改变了大小。要解决此问题,请先将其转换为列表:

for key in list(ground.keys()):
  if key not in prediction:
    del ground[key]

答案 2 :(得分:0)

您可以使用字典理解来创建新字典:

ground = {k: ground[k] for k in ground if k in prediction}

或者使用Python 2中的ground或Python 3中的ground.keys()(也适用于Python 2)迭代list(ground.keys())字典的键。这将返回一个新列表,该列表在从ground字典中删除密钥时不受影响:

for k in list(ground.keys()):
    if k not in prediction:
        del ground[k]