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

如何将两个列表合并为指定格式的字典列表?

如何将重复键名的列表转换为多字典列表?

问题场景

现有两个列表:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:25:19