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

如何通过变量指定的键路径访问Python字典?遇KeyError报错

解决Python中用字符串键路径访问嵌套字典的KeyError问题

你的问题出在把整个键路径字符串当成了单个字典键——testeobj[nav]相当于在找键为"['c']['d']"的条目,但你的字典里根本没有这个键,自然抛出KeyError。而直接写testeobj['c']['d']是链式访问:先取testeobj['c']得到内层字典,再取这个字典的'd'键,这和用字符串当单个键完全是两回事。

下面是几种安全可行的解决方法:

方法1:手动拆分键路径,逐层访问

先把路径字符串拆解成单个键,再逐层遍历字典:

testeobj = {'a': 'b', 'c': {'d': {'e':'f'}}}
nav = "['c']['d']"

# 拆分字符串提取所有键
keys = [key.strip("'[]") for key in nav.split('][')]

# 逐层访问嵌套字典
current = testeobj
for key in keys:
    current = current[key]

print(current)  # 输出: {'e': 'f'}

方法2:用functools.reduce简化代码

借助reduce和operator.getitem可以把逐层访问的逻辑压缩成一行:

from functools import reduce
import operator

testeobj = {'a': 'b', 'c': {'d': {'e':'f'}}}
nav = "['c']['d']"

keys = [key.strip("'[]") for key in nav.split('][')]
result = reduce(operator.getitem, keys, testeobj)

print(result)  # 输出: {'e': 'f'}

绝对要避免的方法:eval

虽然eval(f"testeobj{nav}")能得到正确结果,但如果nav是来自不可信的输入(比如用户输入),这种写法会执行任意代码,存在严重的安全风险,绝对不要使用。

内容的提问来源于stack exchange,提问作者Alexandre Gomes dos Santos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:32:35