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

Python字典通过索引或键访问时出现KeyError问题求助

问题:Python中访问字典触发KeyError的解决办法

我通过WebSocket成功接收了格式正确的JSON数据,代码如下:

while True:
    result = ws.recv()
    result = json.loads(result)

我用遍历的方式可以输出键和对应的值:

for i in result:
    print(i)
    print(result[i])

这会打印出"Valid_Key"和"Some_value",但当我尝试直接通过索引或键名访问时,却触发了KeyError:

  • print(result[0]) 报错:KeyError: 0
  • print(result["Valid_Key"]) 报错:KeyError: 'Valid_Key'

请问该怎么正确通过索引或键访问字典数据?


解决思路和办法

兄弟,你这情况大概率是被JSON解析后的实际数据结构给坑了!看起来遍历能拿到键值,但直接访问报错,无非两种常见原因:

1. 解析后的数据不是单层字典,是列表套字典(或多层嵌套)

你遍历的时候看到的"Valid_Key",可能根本不是最外层结构的键,而是外层列表里某个字典的键。比如解析后的result实际是这样的:

# 示例结构
[
    {"Valid_Key": "Some_value"}
]

这时候for i in result其实是遍历列表里的字典元素,而你看到的"Valid_Key"可能是遍历字典键时的输出(比如你实际写的是for i in result[0]:)。

不管怎样,先排查数据类型和完整结构:

print(type(result))  # 先看是dict还是list
print(result)        # 打印完整的解析后数据,一目了然

如果是列表结构,那得先取列表元素再访问键:

# 假设result是列表,取第一个元素再访问键
print(result[0]["Valid_Key"])

2. 键名存在肉眼不可见的差异

如果result确实是单层字典,但直接用键访问报错,那大概率是键名有隐藏空格、大小写差异或者特殊字符。比如实际键是"Valid_Key "(末尾多了空格),或者"valid_key"(全小写),肉眼看着和你写的一样,但实际字符串不匹配。

这时候可以打印所有键的真实样子:

print(list(result.keys()))

对比输出的键和你写的"Valid_Key"是否完全一致,就能找到问题所在。

总结步骤

  1. 先确认解析后的数据类型(用type(result))
  2. 打印完整数据结构,明确键所在的层级
  3. 检查键的真实字符串,排除大小写、隐藏字符等问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:19:57