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

如何按platform与region分组嵌套字典列表并合并数据?

按平台与地域合并字典列表为嵌套JSON结构

需求说明

将包含platform、region字段,以及存储on_demand_price、capacity_storage_price或tier数据的data字段的字典列表,按平台+地域分组,合并同组内各类数据为指定的嵌套JSON结构。

样本输入数据

sample_data = [
    {'platform': 'amazonwebservicesaws', 'region': 'useastnorthernvirginia', 'data': {'on_demand_price': {'usd': '40.00'}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastnorthernvirginia', 'data': {'on_demand_price': {'eur': '33.33'}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastnorthernvirginia', 'data': {'capacity_storage_price': {'usd': '23.00'}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastnorthernvirginia', 'data': {'capacity_storage_price': {'eur': '19.17'}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastohio', 'data': {'on_demand_price': {'usd': '40.00'}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastohio', 'data': {'on_demand_price': {'eur': '33.33'}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastohio', 'data': {'capacity_storage_price': {'usd': '23.00'}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastohio', 'data': {'capacity_storage_price': {'eur': '19.17'}}},
    {'platform': 'microsoftazure', 'region': 'uksouthlondon', 'data': {'tier': {'enterprise': {'eur': '3.33', 'usd': '4.00', 'gbp': ''}}}},
    {'platform': 'microsoftazure', 'region': 'uksouthlondon', 'data': {'tier': {'business-critical': {'eur': '4.50', 'usd': '5.40', 'gbp': ''}}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastnorthernvirginia', 'data': {'tier': {'standard': {'eur': '1.67', 'usd': '2.00', 'gbp': ''}}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastnorthernvirginia', 'data': {'tier': {'enterprise': {'eur': '2.50', 'usd': '3.00', 'gbp': ''}}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastnorthernvirginia', 'data': {'tier': {'business-critical': {'eur': '3.33', 'usd': '4.00', 'gbp': ''}}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastohio', 'data': {'tier': {'standard': {'eur': '1.67', 'usd': '2.00', 'gbp': ''}}}},
    {'platform': 'amazonwebservicesaws', 'region': 'useastohio', 'data': {'tier': {'enterprise': {'eur': '2.50', 'usd': '3.00', 'gbp': ''}}}}
]

目标输出结构

{
  "platform": {
    "amazonwebservicesaws": {
      "useastnorthernvirginia": {
        "on_demand_price": {
          "usd": "40.00",
          "eur": "33.33"
        },
        "capacity_storage_price": {
          "usd": "23.00",
          "eur": "19.17"
        },
        "tier": {
          "standard": {
            "eur": "1.67",
            "usd": "2.00",
            "gbp": ""
          },
          "enterprise": {
            "eur": "2.50",
            "usd": "3.00",
            "gbp": ""
          },
          "business-critical": {
            "eur": "3.33",
            "usd": "4.00",
            "gbp": ""
          }
        }
      },
      "useastohio": {
        "on_demand_price": {
          "usd": "40.00",
          "eur": "33.33"
        },
        "capacity_storage_price": {
          "usd": "23.00",
          "eur": "19.17"
        },
        "tier": {
          "standard": {
            "eur": "1.67",
            "usd": "2.00",
            "gbp": ""
          },
          "enterprise": {
            "eur": "2.50",
            "usd": "3.00",
            "gbp": ""
          }
        }
      }
    },
    "microsoftazure": {
      "uksouthlondon": {
        "tier": {
          "enterprise": {
            "eur": "3.33",
            "usd": "4.00",
            "gbp": ""
          },
          "business-critical": {
            "eur": "4.50",
            "usd": "5.40",
            "gbp": ""
          }
        }
      }
    }
  }
}

实现代码

def merge_data(sample_list):
    result = {"platform": {}}
    for item in sample_list:
        platform = item["platform"]
        region = item["region"]
        data = item["data"]
        
        # 初始化平台层级
        if platform not in result["platform"]:
            result["platform"][platform] = {}
        # 初始化地域层级
        if region not in result["platform"][platform]:
            result["platform"][platform][region] = {}
        
        region_data = result["platform"][platform][region]
        # 遍历data中的键值对,合并数据
        for key, value in data.items():
            if key not in region_data:
                region_data[key] = {}
            # 处理价格或层级的嵌套结构
            if isinstance(value, dict):
                # 针对on_demand_price、capacity_storage_price的货币合并
                if key in ["on_demand_price", "capacity_storage_price"]:
                    region_data[key].update(value)
                # 针对tier的子层级合并
                elif key == "tier":
                    tier_name = next(iter(value.keys()))
                    if tier_name not in region_data[key]:
                        region_data[key][tier_name] = {}
                    region_data[key][tier_name].update(value[tier_name])
    return result

# 执行合并并打印结果
merged_result = merge_data(sample_data)
import json
print(json.dumps(merged_result, indent=2))

代码说明

  • 逐层初始化platform、region层级,避免因键不存在报错
  • 针对不同类型的data字段做差异化合并:
    • 对on_demand_price和capacity_storage_price,直接合并货币键值对
    • 对tier,先提取层级名称(如standard),再合并该层级下的货币数据
  • 最终用json.dumps格式化输出嵌套结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:30:42