Python如何从嵌套字典列表提取值并生成指定结构DataFrame
实现方案
你可以通过两种常用方式实现需求,两种方案都依赖pandas库完成DataFrame构造,使用前先导入依赖:
import pandas as pd
方案1:固定层级直接索引(适合已知嵌套结构的场景)
你的数据嵌套层级固定,直接按层级索引取值是最简洁高效的方式,完整代码如下:
# 原始数据 list_1 = [{'one':{'two':{'three':{'a':10, 'b':20, 'c':30, 'd':[1,2,3,4]}}}}] # 按层级索引提取键d对应的列表 d_values = list_1[0]['one']['two']['three']['d'] # 构造目标结构DataFrame df = pd.DataFrame({ 'key': ['d'] * len(d_values), 'values': d_values })
运行后输出的df结构完全符合要求:
key values 0 d 1 1 d 2 2 d 3 3 d 4
方案2:递归通用查找(适合嵌套结构不固定的场景)
如果后续数据嵌套层级可能变动,不需要每次手动写索引路径,可以写一个递归查找函数,自动遍历所有嵌套层级定位目标键的值,代码如下:
def find_nested_key(target_key, obj): # 字典类型遍历查找 if isinstance(obj, dict): for k, v in obj.items(): if k == target_key: yield v # 递归查找嵌套内容 yield from find_nested_key(target_key, v) # 列表类型遍历每个元素查找 elif isinstance(obj, list): for item in obj: yield from find_nested_key(target_key, item) # 原始数据 list_1 = [{'one':{'two':{'three':{'a':10, 'b':20, 'c':30, 'd':[1,2,3,4]}}}}] # 自动查找键d对应的值,取第一个匹配结果 d_values = next(find_nested_key('d', list_1)) # 构造目标结构DataFrame df = pd.DataFrame({ 'key': ['d'] * len(d_values), 'values': d_values })
这个方法不需要提前知道嵌套层级,只要目标键d存在于嵌套结构中,就能正确提取到对应值,最终生成的DataFrame和方案1结果完全一致。
内容的提问来源于stack exchange,提问作者Dario Bani
相关产品推荐
相关产品推荐

