python - 从字典键中删除值的问题
问题描述
我有一本字典,其中每个键都保存了一定数量的图像。像这样:
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)
解决方案
你需要小心修改你正在迭代的东西。为了避免在这种情况下发生这种情况,您可以使用称为列表理解的东西:
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]
这会将列表替换为仅包含您想要的元素的新版本。
推荐阅读
- php - 更改 Laravel DataTables 时间格式
- powerbi - DAX - 按最大日期和多个字段或组键计算不同状态和分组的措施
- jquery - 将数据传递到引导模式
- arrays - 键入某些值的数组,其中每个值最多出现一次?(打字稿)
- python - 按共享元素对列表进行分组
- laravel - 使用 laravel 大量添加邮件队列
- mingw - mingw 不会在我的 Windows10 上编译 libnet
- c++ - RGB的奇怪输出
- azure - 尝试使用数据工厂中的 Azure Data Lake Storage Gen 1 链接服务时出错
- ios - 在Core Data / iOS / Swift 5中删除列表时删除列表成员