0

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

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]

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

4

3 回答 3

2

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

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

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

for k in list(ground.keys()):
    if k not in prediction:
        del ground[k]
于 2016-03-21T11:12:16.960 回答
0

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

for key in list(ground.keys()):
  if key not in prediction:
    del ground[key]
于 2016-03-21T11:09:22.613 回答
0

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

pred_set = set(prediction.keys())
g_set = set(ground.keys())
for key in g_set - pred_set:
    del ground[key]
于 2016-03-21T11:00:31.970 回答