Python中在JSON列表查找指定键项触发KeyError,求解决
问题分析与解决
错误原因
- 直接访问不存在的字典键触发KeyError:
循环payload["details"]时,第一个元素是{"ABC1234": {...}},这个字典里没有DEF5678键,用i['DEF5678']直接访问不存在的键会抛出KeyError。 - 多余的
json.loads调用:
你定义的payload已经是Python字典,不是JSON字符串,json.loads()只能处理字符串/字节类型,这行代码会额外触发TypeError。
修复后的代码
方法1:用dict.get()安全访问(不存在的键返回None)
payload = {"name": "John", "age": 30, "city": "New York", "details": [ {"ABC1234": {"name": "Office mover", "ratings": "poor"} }, {"DEF5678": {"name": "Installer", "ratings": "good"} } ], "id": "XYZ12344", "type": "hire" } # 去掉多余的json.loads,直接使用字典 for i in payload["details"]: if i.get('DEF5678') is not None: print(i) # 如果需要获取内部的name和ratings,可以继续访问: # print(i['DEF5678']['name'], i['DEF5678']['ratings'])
方法2:先检查键是否存在于字典中
payload = {"name": "John", "age": 30, "city": "New York", "details": [ {"ABC1234": {"name": "Office mover", "ratings": "poor"} }, {"DEF5678": {"name": "Installer", "ratings": "good"} } ], "id": "XYZ12344", "type": "hire" } for i in payload["details"]: if 'DEF5678' in i: print(i) # 访问内部字段示例: # info = i['DEF5678'] # print(f"Name: {info['name']}, Ratings: {info['ratings']}")
内容的提问来源于stack exchange,提问作者Helen Helen
相关产品推荐
相关产品推荐

