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

如何在Python中实现Dict[str:array[int]]转Array[Dict[str:int]]?

解决Python中字典到列表字典的格式转换问题

方法1:使用zip() + 列表推导式

这是最简洁的实现方式,利用zip()将各键对应列表的元素按位置配对,再逐个生成字典:

original_dict = {'A': [1, 2, 3], 'B': [4, 5, 6]}
result = [{key: val for key, val in zip(original_dict.keys(), items)} 
          for items in zip(*original_dict.values())]
print(result)
# 输出: [{'A': 1, 'B': 4}, {'A': 2, 'B': 5}, {'A': 3, 'B': 6}]

如果需要更直观的写法,可以先提取键列表,再遍历打包后的元素:

keys = list(original_dict.keys())
values = zip(*original_dict.values())
result = [{keys[i]: v for i, v in enumerate(item)} for item in values]

方法2:正确的循环实现(避免引用覆盖)

你遇到的「结果仅保留最后一项」问题,大概率是循环中重复修改同一个字典对象,再多次添加到列表导致的。比如错误写法如下:

# 错误示例:复用同一个字典对象
original_dict = {'A': [1, 2, 3], 'B': [4, 5, 6]}
result = []
temp_dict = {}
for a, b in zip(original_dict['A'], original_dict['B']):
    temp_dict['A'] = a
    temp_dict['B'] = b
    result.append(temp_dict)
print(result)
# 输出: [{'A': 3, 'B': 6}, {'A': 3, 'B': 6}, {'A': 3, 'B': 6}]

问题核心是列表中保存的是字典的引用,每次修改temp_dict都会同步改变列表里的所有元素。正确做法是每次循环创建新字典:

original_dict = {'A': [1, 2, 3], 'B': [4, 5, 6]}
result = []
# 按位置遍历对应元素对
for a_val, b_val in zip(original_dict['A'], original_dict['B']):
    result.append({'A': a_val, 'B': b_val})
print(result)
# 输出: [{'A': 1, 'B': 4}, {'A': 2, 'B': 5}, {'A': 3, 'B': 6}]

如果字典的键不固定(比如可能有多个键),可以用通用循环写法:

original_dict = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
result = []
keys = list(original_dict.keys())
# 按位置打包所有值列表
for values in zip(*original_dict.values()):
    new_dict = {}
    for key, val in zip(keys, values):
        new_dict[key] = val
    result.append(new_dict)
print(result)
# 输出: [{'A':1,'B':4,'C':7}, {'A':2,'B':5,'C':8}, {'A':3,'B':6,'C':9}]

关键注意点

  • 确保所有值列表长度一致,zip()默认只会处理到最短列表的长度。若需处理长度不一致的情况,可使用itertools.zip_longest()并指定缺失值的默认值。
  • 循环中必须每次创建新字典,而非修改同一个字典后重复添加,否则列表中保存的都是同一字典的引用,最终结果会被最后一次修改覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:30:10