我有两个词典,键为字符串,值为整数:
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]
都没有奏效。我怎样才能实现目标?
答案 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]