如何将值为列表的Python字典转换为元素为字典的列表 可使用列表推导式
Python字典格式转换实现方案
错误原因分析
你提供的代码无法正常运行的核心问题是for i in x逻辑错误:直接遍历字典x时,遍历对象是字典的键(即a/b/c/d),而非你需要的列表索引值0/1/2,自然无法通过v[i]取到对应位置的元素。
优先推荐:列表推导式实现
方案1(原始写法逻辑修正版)
# 原字典定义 x = {'a':[1,2,3], 'b':[4,5,6], 'c': [7,8,9], 'd': [10,11,12]} # 列表推导式转换 result = [{k: v[i] for k, v in x.items()} for i in range(len(next(iter(x.values()))))]
说明:这里通过next(iter(x.values()))取原字典第一个值的列表长度(默认所有值对应的列表长度一致,符合你给出的示例场景),用range生成对应的索引值遍历。
方案2(更简洁的列表推导式写法)
结合zip打包对应位置元素,代码可读性更高:
x = {'a':[1,2,3], 'b':[4,5,6], 'c': [7,8,9], 'd': [10,11,12]} result = [dict(zip(x.keys(), vals)) for vals in zip(*x.values())]
说明:zip(*x.values())会将所有值列表的对应位置元素打包为元组,和字典的键一一对应后直接转为字典即可得到目标子元素。
输出验证
两种方案得到的result都和你要求的目标格式完全一致:
[{'a': 1, 'b': 4, 'c': 7, 'd': 10}, {'a': 2, 'b': 5, 'c': 8, 'd': 11}, {'a': 3, 'b': 6, 'c': 9, 'd': 12}]
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

