如何用循环合并嵌套字典并替换原列表中的对应元素?
合并列表中嵌套字典并替换原元素
问题描述
有一个字典列表,每个字典包含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
相关产品推荐
相关产品推荐

