Python如何批量解析API返回的嵌套列表字典,提取指定字段
问题描述
有一个名为places_info的列表,每个元素是包含results和context的字典。其中results是字典组成的列表,每个子字典包含location(地址信息字典)、name、rating字段。当前代码只能提取每个results中第一个元素的对应字段,需要批量提取所有结果的name、rating、location信息,分别存入names、ratings、locations变量。
当前尝试的代码:
results = [place['results'] for place in places_info] names = [place[0]['name'] for place in results] ratings = [place[0]['ratings'] for place in results] # 注意:字段名应为rating locations = [place[0]['locations'] for place in results] # 注意:字段名应为location
places_info部分数据结构示例:
[ { 'results': [ { 'location': {'address': '150 Greenwood Ave',...}, 'name': 'Leslieville Farmers Market', 'rating': 9.1 }, ... # 更多结果元素 ], 'context': {...} }, ... # 更多place元素 ]
解决方案
要提取所有results中的元素,需要遍历每个place下的全部results子元素,以下是两种实现方式:
方法1:先扁平化所有结果,再提取字段
先把嵌套在各个place里的results元素全部整合到一个列表,再分别提取对应字段,逻辑更清晰:
# 扁平化所有results里的元素 all_results = [item for place in places_info for item in place['results']] # 分别提取各个字段 names = [item['name'] for item in all_results] ratings = [item['rating'] for item in all_results] locations = [item['location'] for item in all_results]
方法2:直接用嵌套列表推导式生成目标列表
如果不需要保留扁平化后的all_results,可以直接通过双层推导式生成三个变量:
names = [item['name'] for place in places_info for item in place['results']] ratings = [item['rating'] for place in places_info for item in place['results']] locations = [item['location'] for place in places_info for item in place['results']]
关键修正点
- 原代码仅取每个
place['results']的第一个元素(place[0]),通过双层循环(外层遍历places_info,内层遍历每个place['results'])可覆盖所有结果元素。 - 原代码字段名错误:数据结构中是
rating和location,需修正对应字段名才能正确提取数据。
内容的提问来源于stack exchange,提问作者Abdullah G
相关产品推荐
相关产品推荐

