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
相关产品推荐
相关产品推荐

