Python代码返回空字典:诺贝尔获奖者关联机构数据处理问题排查
解决思路与代码实现
常见错误点排查
- 未正确遍历嵌套层级:获奖者对象→
prizes数组→单个prize→affiliations数组,任何一层遗漏都会导致无输出。 - 未处理字段缺失情况:直接用索引访问(如
laureate['prizes'])会引发KeyError,导致程序中断。 - 忽略空机构名:部分
affiliations条目可能无有效名称,需跳过避免无效键。
正确实现代码
def get_affiliation_prizes(dict_laureates): affiliation_map = {} # 遍历所有获奖者 for laureate in dict_laureates.values(): # 遍历当前获奖者的所有奖项 for prize in laureate.get('prizes', []): # 遍历当前奖项下的关联机构 for affil in prize.get('affiliations', []): org_name = affil.get('name') if not org_name: continue # 组装当前奖项的类别与年份信息 prize_detail = { 'category': prize.get('category'), 'year': prize.get('year') } # 更新机构对应的奖项列表 if org_name not in affiliation_map: affiliation_map[org_name] = [] affiliation_map[org_name].append(prize_detail) return affiliation_map
代码说明
- 用
dict.get(key, default)安全获取嵌套字段,避免因字段缺失报错。 - 逐层遍历数据结构,确保每个关联机构都被处理。
- 对空机构名做过滤,避免无效键存入结果。
- 同一机构多次获奖时,自动追加奖项信息到对应列表中,符合需求示例(如Aarhus University关联多条记录)。
示例输出
当输入包含Aarhus University的获奖记录时,结果会类似:
{ "Aarhus University": [ {"category": "physics", "year": "2020"}, {"category": "chemistry", "year": "2015"} ], "其他机构名": [ {"category": "medicine", "year": "2018"} ] }
内容的提问来源于stack exchange,提问作者Dimitri
相关产品推荐
相关产品推荐

