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

Python列表转字典时出现索引越界错误的求助

列表转字典时出现IndexError的原因分析

原始数据列表

['BILL FROM:', 'TestCorp', 'USA, NY 02123, Washington St.', 'New York, NY, 02123', 'United States', 'musicjohnliofficial@gmail.com', 'BILL TO:', 'Yao Min', 'LA, 2123, Los Angeles', 'new York, NY, 9803432', 'United States', 'yao123@mail.com', 'INVOICE #', '01', 'INVOICE DATE', '2022-08-05', 'AMOUNT DUE', '$36.79', 'SUBTOTAL', '$36.74', 'TAX (0.13%)', '$0.05', 'TOTAL', '$36.79', 'Item', 'Description', 'Quantity', 'Unit Cost', 'Line Total', 'Pen', 'Pen, black coloe', '1.5', '$1.16', '$1.74', 'Book', 'Calculus, Zorych, pt. 1', '3.5', '$10.00', '$35.00', 'Powered by Shopify', 'www.shopify.com']

需求说明

需要将上述列表转换为字典,规则是列表中第i个元素作为键,第i+1个元素作为对应值,目标格式示例:

{'Bill From:': 'TestCorp',..., 'Powered by Shopify': 'www.shopify.com'}

出错的代码及错误信息

尝试用字典推导式构建字典,但代码参数有误:

res_dct = {prepared_data[i]: prepared_data[i + 1] for i in range(, len(prepared_data))}

运行后抛出错误:

IndexError: list index out of range

测试成功的小例子

用短列表测试时代码正常运行:

>>> lst = ['a', 1, 'b', 2, 'c', 3]
>>> res_dct = {lst[i]: lst[i + 1] for i in range(0, len(lst), 2)}
>>> res_dct
{'a': 1, 'b': 2, 'c': 3}

问题原因及解决方案

问题根源

  1. 出错代码中range(, len(prepared_data))缺少起始参数0,更关键的是未指定步长2。
  2. 当遍历到列表最后一个元素(索引为len(prepared_data)-1)时,i+1会超出列表最大索引范围,触发IndexError。
  3. 短列表测试代码正确,是因为用了range(0, len(lst), 2),步长设为2后,i只会取0、2、4这类偶数索引,确保i+1不会越界。

修正后的代码

将推导式中的range参数调整为带步长的形式:

res_dct = {prepared_data[i]: prepared_data[i + 1] for i in range(0, len(prepared_data), 2)}

注:原始列表中存在同一类别下的多段值(比如BILL FROM:对应的后续地址信息),按此方式转换会将USA, NY 02123, Washington St.作为TestCorp的键,这可能不符合实际需求。如果需要将BILL FROM:对应所有后续地址信息,还需要额外逻辑处理键值的分组,但当前报错的核心问题是步长缺失导致的索引越界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:06:01