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

Python如何提取字典列表的SourceKey值作为新键生成嵌套字典列表

问题解决思路与可运行代码

首先明确原有代码的两处错误:

  • 初始化逻辑错误:你预期的输出是嵌套字典的列表,不能用[new_data] = {}初始化,该写法语法与逻辑均不成立
  • dict.update()方法入参格式错误:该方法仅支持传入单个字典/可迭代键值对,不支持直接传入键、值两个独立参数

实现方案

方案1:基础遍历写法(可读性最高)

按照你原有遍历思路修改后的代码如下,输出和你预期的格式完全一致:

new_data = []
for row in data:
    source_key = row.get('SourceKey')
    # 仅SourceKey存在且非空时处理
    if source_key:
        # 复制原字典后删除SourceKey字段,避免修改原始数据
        processed_row = row.copy()
        processed_row.pop('SourceKey')
        # 组装为要求的格式加入列表
        new_data.append({source_key: processed_row})

如果你实际需要的是单个大字典(而非字典列表,键为所有SourceKey值,值为对应剔除SourceKey后的字典),则可以用下方代码:

new_data = {}
for row in data:
    source_key = row.get('SourceKey')
    if source_key:
        processed_row = row.copy()
        processed_row.pop('SourceKey')
        # 直接赋值即可,不需要调用update方法
        new_data[source_key] = processed_row

如果一定要用update方法实现,对应你原代码下划线位置的逻辑是{k:v for k,v in row.items() if k != 'SourceKey'},同时需要把update的入参改为字典格式:

new_data.update({row['SourceKey']: {k:v for k,v in row.items() if k != 'SourceKey'}})

方案2:推导式写法(更简洁)

一行即可实现需求:

new_data = [{row['SourceKey']: {k:v for k,v in row.items() if k != 'SourceKey'}} for row in data if row.get('SourceKey')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:06:04