Python按大洲汇总年度病例数代码的KeyError报错修复请求
排查修复KeyError:1990问题
常见触发原因及修复方案
原因1:部分数据字典缺失1990年份键
有些国家的病例数据里可能没有1990年的记录,直接用data[1990]访问就会触发KeyError。修复时用get()方法做安全访问,缺失年份默认计为0:cases = data.get(year, 0)原因2:结果字典未提前初始化年度键
累加病例总和前,没有先给对应大洲的年度键赋值初始值,直接做continent_data[year] += cases就会报错。修复时需要先判断年度键是否存在,不存在就设为0:if year not in continent_data: continent_data[year] = 0 continent_data[year] += cases原因3:年份字段是字符串类型(如"1990")
数据集里的年份键可能是字符串而非整数,代码里用整数1990访问自然找不到。可以统一转换类型,或者直接用字符串遍历:# 遍历年份时用字符串 years = [str(y) for y in range(1990, 2021)] # 或者访问时转换类型 cases = data.get(str(year), 0)
完整修复示例代码
def calculate_continent_cases(dataset): result = {} # 覆盖1990到2020所有年份 years = range(1990, 2021) for data in dataset: continent = data['大洲'] # 初始化当前大洲的年度病例字典,所有年份默认0 if continent not in result: result[continent] = {year: 0 for year in years} for year in years: # 安全获取病例数,兼容整数/字符串类型年份(按需切换注释) cases = data.get(year, 0) # cases = data.get(str(year), 0) result[continent][year] += cases return result
这段代码提前初始化了所有年份的初始值,用get()避免缺失键报错,同时兼容两种年份键类型。
内容的提问来源于stack exchange,提问作者moon knight
相关产品推荐
相关产品推荐

