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

如何将两个列表映射为指定格式的字典列表?Python技术求助

问题描述

现有两个列表:

k = ['00-00', '00-01', '00-02', '00-00', '00-01', '00-02']
a = [1.08, 2.89, 3.88, 4.44, 8.88, 9.99]

期望将它们映射为如下格式的字典列表:

[{'00-00':1.08, '00-01':2.89, '00-02':3.88}, {'00-00':4.44, '00-01':8.88, '00-02':9.99}]

编写的错误代码:

res = []
for item in range(0, len(a)):
     res.append(dict(zip(k, a[item: len(a)])))

错误输出:

[{'00-00': 4.44, '00-01': 8.88, '00-02': 9.99}, {'00-00': 8.88, '00-01': 9.99, '00-02': 4.44}, {'00-00': 9.99, '00-01': 4.44, '00-02': 8.88}, {'00-00': 4.44, '00-01': 8.88, '00-02': 9.99}, {'00-00': 8.88, '00-01': 9.99}, {'00-00': 9.99}]
解决方案

问题根源

原代码循环次数等于a的长度(6次),每次从当前索引截取a的后续元素,再和完整的k列表做zip操作,导致生成的字典要么键值错位,要么因长度不匹配丢失数据,完全偏离了“每3个元素为一组生成字典”的需求。

正确实现

观察到k和a均按每3个元素为一组重复/对应,因此可以按步长3分组处理:

k = ['00-00', '00-01', '00-02', '00-00', '00-01', '00-02']
a = [1.08, 2.89, 3.88, 4.44, 8.88, 9.99]

res = []
# 按步长3遍历,每次处理一组元素
for i in range(0, len(a), 3):
    # 截取当前组的键和值,zip后转换为字典并加入结果列表
    res.append(dict(zip(k[i:i+3], a[i:i+3])))

print(res)

执行后输出符合预期:

[{'00-00': 1.08, '00-01': 2.89, '00-02': 3.88}, {'00-00': 4.44, '00-01': 8.88, '00-02': 9.99}]

简洁写法(可选)

使用列表推导式可以一行完成:

res = [dict(zip(k[i:i+3], a[i:i+3])) for i in range(0, len(a), 3)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:56:09