如何从列表中获取字典,解决list indices must be integers or slices报错
问题修复方案
报错根因
TypeError: list indices must be integers or slices, not str 报错的核心原因是代码误将列表类型的节点当做字典,用字符串键访问了列表。你的代码中res['departure']默认把res当成字典处理,但实际API返回的res本身是列表,列表内的每个元素才是包含departure字段的航班字典对象。
备注:res通过
res = await foo.json()获取,是API响应的JSON格式化结果,并非读取本地文件所得。
具体修复方法
- 如果你只需要取第一条航班的出发机场ICAO,先通过下标取列表的第一个元素(列表下标从0开始),再逐层访问字典键即可:
embed.add_field(name=f"Departure Airport ({res[0]['departure']['airport']['icao']})")
- 如果你需要批量处理所有航班的信息,遍历整个
res列表即可:
for single_flight in res: departure_icao = single_flight['departure']['airport']['icao'] # 后续可按需自定义字段值等逻辑 embed.add_field(name=f"Departure Airport ({departure_icao})", value="自定义字段内容")
通用排错技巧
后续遇到同类层级访问报错时,可以逐层打印节点类型快速定位问题位置:
print(type(res)) # 确认最外层res的类型 print(type(res[0])) # 确认列表第一个元素的类型 print(type(res[0]['departure'])) # 确认departure节点的类型
如果打印后发现其他层级是列表,同样用下标先取对应元素再访问后续键即可。
内容的提问来源于stack exchange,提问作者lexd283
相关产品推荐
相关产品推荐

