如何在Python中为每个item批量关联账户与店铺数据?求通用实现
如何通用实现嵌套字典与列表项的自动合并?
问题描述
给定嵌套结构的原始数据:
raw_data_row = { "account_level_data" : {"account_name": "A", "currency" :"USD"}, "store_level_data" : {"store_name": "MyStore", "address" :"MyStreet"}, "item_values" : [{"name": "a", "price" : 30}, {"name": "b", "price" : 40}] }
需要生成将所有顶层嵌套字典的字段与列表中每个项合并后的结构,目标输出如下:
new_data = [ {"account_name": "A", "currency" :"USD", "store_name":"MyStore", "address":"MyStreet", "name": "a", "price" : 30}, {"account_name": "A", "currency" :"USD", "store_name":"MyStore", "address":"MyStreet", "name": "b", "price" : 40} ]
当前通过手动指定每个字段的方式实现,但希望找到无需硬编码字段名的通用方案。
通用解决方案
核心思路
- 先提取所有顶层的非列表型嵌套字典,合并为一个基础字典
- 遍历目标列表中的每个元素,将基础字典与元素字典合并,生成最终的条目
代码实现
raw_data_row = { "account_level_data" : {"account_name": "A", "currency" :"USD"}, "store_level_data" : {"store_name": "MyStore", "address" :"MyStreet"}, "item_values" : [{"name": "a", "price" : 30}, {"name": "b", "price" : 40}] } # 构建基础字典:合并所有顶层的字典类型字段 base_dict = {} for key, val in raw_data_row.items(): if isinstance(val, dict): base_dict.update(val) # 合并基础字典与每个列表项(用列表推导式简化代码) new_data = [{**base_dict, **item} for item in raw_data_row["item_values"]] print(new_data)
关键说明
- 自动识别并合并所有顶层字典字段,无需手动指定字段名
- 使用字典解包语法
{**d1, **d2}合并字典(Python 3.5+支持),若需兼容旧版本,可替换为dict(base_dict, **item) - 若存在键冲突(基础字典与列表项有同名键),列表项的键值会覆盖基础字典的对应值
- 若原始数据中有多个列表字段,只需指定需要关联的目标列表键(如示例中的
item_values)
内容的提问来源于stack exchange,提问作者Elad Benda
相关产品推荐
相关产品推荐

