如何在Python中提取嵌套列表内嵌套字典中的id值
提取嵌套字典列表中所有"id"值的解决方案
首先得先理清你的数据结构:y是一个混合了字典和列表的嵌套集合——第一个元素是元数据字典,第二个元素是装了单个字典的列表,而这个字典里还嵌套了多个子字典(比如adminregion、incomeLevel这类),这些子字典也包含id键。
你之前的两种方法都没覆盖到嵌套层级的id:
- 第一种列表推导式只拿到了外层字典的
id(也就是ABW),完全没处理嵌套的子字典 - 第二种嵌套循环只是遍历了外层字典的键,没深入到子字典里去查找
id
通用解决方案:递归遍历(推荐)
因为嵌套结构可能有任意深度,写个递归函数是最稳妥的方式,能自动处理所有层级的id:
def extract_all_ids(data): collected_ids = [] # 处理列表:遍历每个元素递归提取 if isinstance(data, list): for item in data: collected_ids.extend(extract_all_ids(item)) # 处理字典:先检查自身有没有id,再遍历值递归提取 elif isinstance(data, dict): if 'id' in data: collected_ids.append(data['id']) for value in data.values(): collected_ids.extend(extract_all_ids(value)) # 非列表/字典的类型直接忽略 return collected_ids # 调用函数提取所有id all_ids = extract_all_ids(y) print(all_ids)
运行后你会得到所有层级的id:
['', '', 'ABW', 'HIC', 'LNX', 'LCN']
如果想过滤掉空字符串的id,只要在添加的时候加个判断就行:
if 'id' in data and data['id'].strip() != '': collected_ids.append(data['id'])
过滤后的结果就是:
['ABW', 'HIC', 'LNX', 'LCN']
针对当前特定结构的快速写法(不通用)
如果你确定数据结构不会变,也可以手动遍历固定层级,但这种方式扩展性很差,结构一变就失效:
# 先拿到目标字典(y[1]是列表,取第一个元素) target = y[1][0] all_ids = [ target['id'], target['adminregion']['id'], target['incomeLevel']['id'], target['lendingType']['id'], target['region']['id'] ] print(all_ids)
还是更推荐递归的方式,不管后续数据有没有新增嵌套层级,都能正确提取所有id,之后你就可以把这些id存入数据库啦。
内容的提问来源于stack exchange,提问作者Dia Abdulkarim
相关产品推荐
相关产品推荐

