如何将两个列表合并为指定格式的字典列表?
如何将重复键名的列表转换为多字典列表?
问题场景
现有两个列表:
a = ['ymd', 'publisher_name', 'country_name', 'ymd', 'publisher_name', 'country_name', 'ymd', 'publisher_name', 'country_name'] b = ['2022-12-01', 'Media1', 'United Kingdom', '2022-12-01', 'Media1', 'Brazil','2022-12-01', 'Media1', 'Laos']
尝试用zip+dict处理的代码:
dictList = dict(zip(a,b)) print(dictList)
仅得到最后一组键值对:
{'ymd': '2022-12-01', 'publisher_name': 'Media1', 'country_name': 'Laos'}
期望生成的结果:
[ {'ymd': '2022-12-01', 'publisher_name': 'Media1', 'country_name': 'United Kingdom'}, {'ymd': '2022-12-01', 'publisher_name': 'Media1', 'country_name': 'Brazil'}, {'ymd': '2022-12-01', 'publisher_name': 'Media1', 'country_name': 'Laos'} ]
问题原因
Python字典的键具有唯一性,dict(zip(a,b))会用后续重复键的新值覆盖旧值,最终只保留每组键的最后一次赋值。
解决方案
需要先将值列表按固定长度(每组3个元素)分割,再与键名一一对应生成字典。以下是几种实现方式:
方法1:基础循环切片
# 提取唯一键名(无需重复使用原列表a) keys = ['ymd', 'publisher_name', 'country_name'] result = [] # 每3个元素为一组遍历值列表b for i in range(0, len(b), 3): value_group = b[i:i+3] result.append(dict(zip(keys, value_group))) print(result)
方法2:列表推导式(简洁写法)
keys = ['ymd', 'publisher_name', 'country_name'] result = [dict(zip(keys, b[i:i+3])) for i in range(0, len(b), 3)] print(result)
方法3:迭代器分组(适合大型列表)
from itertools import islice keys = ['ymd', 'publisher_name', 'country_name'] value_iter = iter(b) result = [] while True: # 每次从迭代器取3个元素 group = list(islice(value_iter, 3)) if not group: break result.append(dict(zip(keys, group))) print(result)
内容的提问来源于stack exchange,提问作者Ed Godalle
相关产品推荐
相关产品推荐

