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

Python遍历列表与嵌套列表 使用zip批量生成字典的实现问题

问题根因

原代码运行只输出最后一个字典的原因非常直接:循环过程中每次生成的新字典都会直接覆盖result变量的旧值,循环执行完成后,变量内仅保留最后一次迭代生成的字典,前面所有子列表的转换结果都被覆盖丢弃了。

可行实现方案

根据使用场景,可以选以下两种实现方式:

方案1:列表推导式批量生成(最简洁)

如果不需要在转换过程中对单个字典做额外处理,直接用列表推导式就能完成所有子列表的转换,哪怕子列表数量到数百级也没有性能问题:

list1 = ['SYNNR', 'NAME', 'BUNDESLAND']
list2 = [['11032', 'POYSDORF-OST', 'NOE'], ['11033', 'POYSDORF-WEST', 'NOE'], ['11034', 'POYSDORF-NORD', 'NOE']]

result = [dict(zip(list1, sub_list)) for sub_list in list2]

运行后result是包含3个字典的列表,完全匹配预期输出结果:

[
    {'SYNNR': '11032', 'NAME': 'POYSDORF-OST', 'BUNDESLAND': 'NOE'},
    {'SYNNR': '11033', 'NAME': 'POYSDORF-WEST', 'BUNDESLAND': 'NOE'},
    {'SYNNR': '11034', 'NAME': 'POYSDORF-NORD', 'BUNDESLAND': 'NOE'}
]

方案2:初始化容器逐次追加(适合需单条处理的场景)

如果转换过程中需要对每个生成的字典做校验、写入等自定义逻辑,可以提前初始化一个空列表作为存储容器,每次循环生成字典后追加到容器中,而非直接覆盖变量:

list1 = ['SYNNR', 'NAME', 'BUNDESLAND']
list2 = [['11032', 'POYSDORF-OST', 'NOE'], ['11033', 'POYSDORF-WEST', 'NOE'], ['11034', 'POYSDORF-NORD', 'NOE']]

result = []
for sub_list in list2:
    single_dict = dict(zip(list1, sub_list))
    # 此处可添加针对单个字典的自定义处理逻辑
    result.append(single_dict)

# 如需逐行打印所有字典,直接遍历结果列表即可
for item in result:
    print(item)

编码提示:Python遍历序列时不推荐使用range(len(序列))的索引写法,直接遍历可迭代对象本身可读性更好,也能避免索引越界类的bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.06 16:18:56