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

如何以Pythonic方式将指定DataFrame字典转换为目标JSON格式?

优雅转换特定字典结构为目标JSON格式

问题背景

现有如下字典形式的DataFrame结构:

original_data = {
    'bisac_code1': {2: {'BIO016000': 0.8, 'CKB041000': 0.30000000000000004}},
    'bisac_code2': {2: {'CKB049000': 0.3, 'BIO028000': 0.8}},
    'bisac_code3': {2: {'SPO058000': 0.8, 'CKB030000': 0.3}}
}

需要将其转换为如下规范JSON结构(注:原目标示例存在语法瑕疵,已修正为合法JSON格式):

{
    "bisac_code_1": [
        {"code": "BIO016000", "weight": 0.8},
        {"code": "CKB041000", "weight": 0.30000000000000004}
    ],
    "bisac_code_2": [
        {"code": "CKB049000", "weight": 0.3},
        {"code": "BIO028000", "weight": 0.8}
    ],
    "bisac_code_3": [
        {"code": "SPO058000", "weight": 0.8},
        {"code": "CKB030000", "weight": 0.3}
    ]
}

此前通过循环加大量字符串格式化的非Pythonic方式实现,现寻求更优雅的实现方案。

Pythonic解决方案

可以结合字典推导式和列表推导式完成转换,代码简洁且可读性强:

import json

original_data = {
    'bisac_code1': {2: {'BIO016000': 0.8, 'CKB041000': 0.30000000000000004}},
    'bisac_code2': {2: {'CKB049000': 0.3, 'BIO028000': 0.8}},
    'bisac_code3': {2: {'SPO058000': 0.8, 'CKB030000': 0.3}}
}

# 核心转换逻辑
transformed_data = {
    # 调整键名格式:bisac_codeX → bisac_code_X
    key.replace('bisac_code', 'bisac_code_'): [
        # 将内层键值对转为指定字典结构
        {'code': code, 'weight': weight}
        for code, weight in value[2].items()
    ]
    for key, value in original_data.items()
}

# 生成格式化后的JSON字符串
json_result = json.dumps(transformed_data, indent=4)
print(json_result)

代码说明

  1. 字典推导式:遍历原始数据的每个键值对,同时完成键名的格式修正。
  2. 列表推导式:针对每个键对应的内层字典(原始数据中固定以2为键),批量转换为{"code": ..., "weight": ...}的字典结构,组成列表作为新键的值。
  3. json.dumps:将转换后的字典格式化为带缩进的JSON字符串,完全匹配目标格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:25:24