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

如何将Pandas DataFrame转换为API请求所需的JSON格式字典?

解决方案

首先要指出:你给出的期望输出存在一个字典键重复的问题——比如Japan的条目里重复了两次groups键,这在Python字典中是不合法的,重复的键会被覆盖。正确的结构应该是把同层级的子项放在同一个groups数组中,修正后的目标格式如下:

{"groups":
[
    {
        "name": "Japan",
        "groups":
            [
                {"name": "Flowers", "ids": [0]},
                {"name": "Sushi", "ids": [2]}
            ]
    },
    {
        "name": "United States",
        "groups":
            [
                {
                    "name": "Guns",
                    "groups":
                        [
                            {"name": "yes", "ids": [1]}
                        ]
                }
            ]
    },
    {
        "name": "South Korea",
        "groups":
            [
                {"name": "Sunscreen", "ids": [3]}
            ]
    }
]
}

以下是实现该转换的代码:

import pandas as pd
import json

my_list = [
    ['Japan', 'Flowers'],
    ['United States', 'Guns', 'yes'],
    ['Japan', 'Sushi'],
    ['South Korea', 'Sunscreen']
]

df = pd.DataFrame(my_list, columns=["country", "sector", "flag"])

def build_nested_structure(df):
    root = {"groups": []}
    # 遍历每行,行号作为id
    for idx, row in df.iterrows():
        # 提取当前行的非空值作为层级路径
        path = [val for val in row if pd.notna(val)]
        current_level = root["groups"]
        
        # 处理路径中的每个中间节点(除最后一个)
        for name in path[:-1]:
            # 检查当前层级是否已存在该节点
            existing_node = next((item for item in current_level if item["name"] == name), None)
            if not existing_node:
                # 不存在则创建新节点
                existing_node = {"name": name, "groups": []}
                current_level.append(existing_node)
            # 进入下一层级
            current_level = existing_node["groups"]
        
        # 处理最后一个节点,添加ids
        last_name = path[-1]
        existing_last = next((item for item in current_level if item["name"] == last_name), None)
        if existing_last:
            existing_last["ids"].append(idx)
        else:
            current_level.append({"name": last_name, "ids": [idx]})
    return root

# 生成并格式化输出结果
result = build_nested_structure(df)
print(json.dumps(result, indent=4))

代码说明

  1. 遍历DataFrame的每一行,将行号idx作为ids字段的值。
  2. 提取每行的非空值,组成层级路径(比如美国那行的路径是["United States", "Guns", "yes"])。
  3. 从根层级开始逐层检查节点:不存在则创建新节点,存在则进入该节点的子层级继续处理。
  4. 对路径的最后一个节点,添加ids字段;若节点已存在,则追加行号,否则创建新节点并初始化ids。

运行代码后即可得到符合要求的嵌套字典结构,直接用于API请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:01:47