首页 > 解决方案 > 从字典键中删除值的问题

问题描述

我有一本字典,其中每个键都保存了一定数量的图像。像这样:

key 1: [image1, image2, image3, image4]

计算出密钥的每张图像与密钥的最后一张图像之间的 SSIM 后: 例如:

s1 = ssim(image4, image1)

如果 的值s大于阈值,则将图像保存在字典中。

key 1: [image1, image2, image3, image4]

如果 的值s小于阈值,则从字典中删除图像。然后:

key 1: [image2, image3, image4]

但在这样做时,我得到了错误:

IndexError: pop index out of range

谁能告诉我出了什么问题?

代码

for img in range(len(img_dict1[key])):
    similarity=ssim(img_dict1[key][-1],img_dict1[key][img])
    if similarity > 0.85:
        continue
    else:
        img_dict1[key] = list(img_dict1[key]).pop(img)

标签: pythondictionarykey

解决方案


你需要小心修改你正在迭代的东西。为了避免在这种情况下发生这种情况,您可以使用称为列表理解的东西:

img_dict1[key] = [img_dict1[key][i] for i in range(len(img_dict1[key]))
                    if ssim(img_dict1[key][-1], img_dict1[key][i]) > 0.85]

这会将列表替换为仅包含您想要的元素的新版本。


推荐阅读