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

从含整数键的字典取值遇IndexError,如何解决?

问题分析与解决方法

错误原因

你犯了三个核心错误:

  1. 混淆了列表与函数的调用方式:listOfInformation是列表类型,不能用圆括号()调用,列表元素的正确访问方式是方括号[]。
  2. 错误使用列表索引:你的列表仅包含1个元素(索引为0),直接用pokemon_id(如123456789)作为列表索引,必然超出列表长度,触发IndexError: list index out of range。
  3. 数据结构访问逻辑错误:列表内部嵌套的是字典,你需要先获取列表中的字典元素,再通过pokemon_id作为字典键查找对应值,而非直接用pokemon_id操作列表。

解决方法

方法1:适配现有数据结构修正逻辑

先提取列表中的字典元素,再通过字典键查询目标值:

# 原始数据结构
listOfInformation = [{123456789: {'PokemonId': '123456789', 'PokemonName': 'Pikachu', 'PokemonAttack': 'thunderbolt'}}]

def get_pokemon_info(pokemon_id):
    # 获取列表中唯一的字典元素
    pokemon_map = listOfInformation[0]
    # 用get方法安全取值,避免键不存在时触发KeyError
    return pokemon_map.get(pokemon_id)

# 调用示例
result = get_pokemon_info(123456789)
print(result)
# 输出:{'PokemonId': '123456789', 'PokemonName': 'Pikachu', 'PokemonAttack': 'thunderbolt'}

方法2:优化数据结构(更推荐)

既然你是通过pokemon_id做查询,直接使用字典结构会更高效,无需嵌套列表:

# 优化后的字典结构
pokemon_info = {
    123456789: {'PokemonId': '123456789', 'PokemonName': 'Pikachu', 'PokemonAttack': 'thunderbolt'},
    # 可扩展添加更多宝可梦数据
    987654321: {'PokemonId': '987654321', 'PokemonName': 'Charmander', 'PokemonAttack': 'Flamethrower'}
}

def get_pokemon_info(pokemon_id):
    # 自定义默认返回值,避免无匹配时返回None
    return pokemon_info.get(pokemon_id, "未找到对应宝可梦信息")

# 调用示例
print(get_pokemon_info(123456789))

关键注意点

  • 列表是有序集合,通过从0开始的整数索引访问元素;字典是键值对集合,通过键访问对应值,两者访问逻辑完全不同。
  • 使用字典的get()方法可以避免键不存在时抛出KeyError,还能自定义默认返回内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:45