Python:如果另一个词典中不存在密钥,如何从一个字典中删除密钥



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

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]

两者都没有用。如何实现目标?

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

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

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

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

你的第二次尝试在Python 2中工作正常。在Python 3中,keys()是一个视图而不是一个列表,所以会给出与第一个相同的错误:字典在迭代过程中改变了大小。要解决此问题,请先将其转换为列表:

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

您循环字典并在同一循环中删除密钥。这就是为什么它可能不起作用。尝试:

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

最新更新