Python如何将两个字典列表按对应位置合并为一个字典列表
问题描述
需按索引位置合并两组分别存储title、image字段的字典列表,规则为同位置字典的键值对合并为新字典,最终按原顺序生成新列表。
- 原始输入:
title = [{'title': 'Title Text One'}, {'title': 'Title Text Two'}, {'title': 'Title Text Three'}] image = [{"image": "happy.jpg"}, {"image": "smile.jpg"}, {"image": "angry.jpg"}]
- 期望输出:
data = [{'title': 'Title Text One', 'image': 'happy.jpg'}, {'title': 'Title Text Two', 'image': 'smile.jpg'}, {'title': 'Title Text Three', 'image': 'angry.jpg'}]
实现方法
可以通过zip同步遍历两个列表的同位置元素,再合并字典即可,以下是不同场景的写法:
- 通用循环写法(兼容Python 3.5+版本,可读性高)
data = [] # 按顺序配对两个列表同位置的字典 for title_item, image_item in zip(title, image): # 解包两个字典的键值对,合并为新字典 merged_item = {**title_item, **image_item} data.append(merged_item)
- 说明:
zip(title, image)会按顺序依次取出两个列表同位置的元素配对;字典解包语法{**a, **b}会把两个字典的键值对合并到新字典中,若存在同名键,后一个字典的值会覆盖前一个,当前场景下两组字典的键无重叠,可直接使用。
- 列表推导式写法(代码更简洁)
data = [{**t, **img} for t, img in zip(title, image)]
- Python 3.9+ 版本专属写法(利用字典合并运算符,语义更直观)
data = [t | img for t, img in zip(title, image)]
注意:默认
zip会在较短的列表遍历完成后停止,如果两个列表长度不一致,长列表多出的元素会被丢弃。如果需要保留长列表所有元素、缺失位置填充默认值,可以替换为itertools.zip_longest实现。
内容的提问来源于stack exchange,提问作者Charlies
相关产品推荐
相关产品推荐

