You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含嵌套字典列表的结构化列表转换为DataFrame

嵌套字典列表转DataFrame:展开Permissions列的解决方案

假设你的原始数据结构类似这样:

data = [
    {
        "Table Name": "users",
        "Permissions": [
            {"User": "admin", "Access": "read_write"},
            {"User": "guest", "Access": "read_only"}
        ]
    },
    {
        "Table Name": "orders",
        "Permissions": [
            {"User": "admin", "Access": "full_access"},
            {"User": "analyst", "Access": "read_only"}
        ]
    }
]

直接用pd.json_normalize(data)会把Permissions保留为字典列表,无法实现每个Table Name对应一条权限记录的需求。这里提供两种可行方案:

方法1:手动遍历展开数据

遍历原始列表,将每个表名与对应的权限字典逐一合并,生成扁平化列表后再转换为DataFrame:

import pandas as pd

flattened_data = []
for item in data:
    table_name = item["Table Name"]
    for perm in item["Permissions"]:
        flattened_data.append({"Table Name": table_name, **perm})

df = pd.DataFrame(flattened_data)

输出的DataFrame结构如下:

Table NameUserAccess
usersadminread_write
usersguestread_only
ordersadminfull_access
ordersanalystread_only

方法2:用pandas的explode+json_normalize组合

先拆分Permissions列表为多行,再将权限字典展开为独立列:

import pandas as pd

# 先转换为临时DataFrame,此时Permissions为列表列
df_temp = pd.DataFrame(data)
# 展开Permissions列表,生成多行记录
df_exploded = df_temp.explode("Permissions", ignore_index=True)
# 合并表名列与展开后的权限列
df = pd.concat([df_exploded["Table Name"], pd.json_normalize(df_exploded["Permissions"])], axis=1)

该方法利用pandas内置方法实现,适合处理大规模数据,效率更高,最终结果与方法1完全一致。


内容的提问来源于stack exchange,提问作者Vijay Tripathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:51:01