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

如何用循环合并嵌套字典并替换原列表中的对应元素?

合并列表中嵌套字典并替换原元素

问题描述

有一个字典列表,每个字典包含adv和advertiser两个嵌套字典,示例如下:

original_list = [
    {'adv': {'advNo': '111', 'classify': 'mass'}, 
     'advertiser': {'userNo': '1112','type':'sell'}},
    {'adv': {'advNo': '112', 'classify': 'mass'}, 
     'advertiser': {'userNo': '1113','type':'sell'}}
] 

需要将每个元素中的两个嵌套字典合并为一个字典,替换原列表中的对应元素,最终得到[{合并后的字典1}, {合并后的字典2}]的结构。已实现单个字典的合并,但无法批量替换原列表元素,需要循环批量处理。

解决方案

首先修正你之前单个合并代码的错误:外层字典的键是'adv'和'advertiser',不能用索引[0]获取,需通过键名访问。以下是两种实用实现方式:

方法1:循环遍历修改原列表

直接通过索引遍历原列表,替换每个位置的元素为合并后的字典:

def merge_dicts(item):
    # 合并当前元素的两个嵌套字典
    return {**item['adv'], **item['advertiser']}

original_list = [
    {'adv': {'advNo': '111', 'classify': 'mass'}, 
     'advertiser': {'userNo': '1112','type':'sell'}},
    {'adv': {'advNo': '112', 'classify': 'mass'}, 
     'advertiser': {'userNo': '1113','type':'sell'}}
]

# 遍历索引替换原元素
for i in range(len(original_list)):
    original_list[i] = merge_dicts(original_list[i])

print(original_list)

输出结果:

[
    {'advNo': '111', 'classify': 'mass', 'userNo': '1112', 'type': 'sell'},
    {'advNo': '112', 'classify': 'mass', 'userNo': '1113', 'type': 'sell'}
]

方法2:列表推导式生成新列表(更简洁)

若无需保留原列表,可直接生成合并后的新列表:

original_list = [
    {'adv': {'advNo': '111', 'classify': 'mass'}, 
     'advertiser': {'userNo': '1112','type':'sell'}},
    {'adv': {'advNo': '112', 'classify': 'mass'}, 
     'advertiser': {'userNo': '1113','type':'sell'}}
]

merged_list = [{**item['adv'], **item['advertiser']} for item in original_list]

print(merged_list)

注意事项

  • 若adv和advertiser存在重复键,advertiser的键值会覆盖adv的对应值,这是{**d1, **d2}语法的特性。
  • 若Python版本低于3.5,不支持{**d1, **d2},可改用dict(item['adv'], **item['advertiser']),或先复制adv再用update合并(注意update会修改原字典,需提前复制)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:15:45