如何将两个列表映射为指定格式的字典列表?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
相关产品推荐
相关产品推荐

