You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取文件中数值ID访问字典时报KeyError: '16977'问题求助

问题成因
  • 核心原因是键的类型和格式不匹配:imgToGTS的键来自COCO标注的ann['image_id'],是整数类型(比如示例中的16977);而从id.txt逐行读取的内容默认是字符串类型,且会携带每行末尾的换行符\n,你实际用来查找的键是字符串'16977'或者'16977\n',和整数16977是完全不同的字典键,Python无法匹配就会抛出KeyError。
  • 错误信息KeyError: '16977'中键带引号,也直接证明了查找的是字符串类型的键,和字典中存储的整数键不对应。
解决方法

读取文件内容时先做清洗和类型转换,再用于字典查找,同时推荐用with上下文管理器自动管理文件句柄,避免文件泄漏:

def calculate_metrics(GTS,RES):
    gts = {}
    with open("id.txt", 'r') as f:
        for line in f:
            # strip()去掉首尾的换行符、空格等空白字符,再转成整数
            imgId = int(line.strip())
            gts[imgId] = imgToGTS[imgId]
            print(imgToGTS[imgId])

如果需要兼容id.txt中存在无效id的场景,可以增加存在性判断做容错:

def calculate_metrics(GTS,RES):
    gts = {}
    with open("id.txt", 'r') as f:
        for line in f:
            imgId = int(line.strip())
            if imgId in imgToGTS:
                gts[imgId] = imgToGTS[imgId]
                print(imgToGTS[imgId])
            else:
                print(f"警告:id {imgId} 不在标注数据中,已跳过")

内容的提问来源于stack exchange,提问作者Lei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:09:03