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

如何通过字符串形式的嵌套键修改Python字典对应值?

解决嵌套JSON对象赋值的语法错误问题

问题原因

直接用eval(obj_key + ' = "my_new_value"')报错,是因为eval仅支持执行表达式,无法直接处理赋值语句;此外这种写法还存在安全风险,若obj_key包含恶意代码会引发问题。

方案一:拆分键路径逐层修改(推荐,安全可靠)

不用eval,把返回的键路径拆分为单个节点,逐层遍历到目标位置后赋值:

# 示例对象与键路径
obj = {'key1': {'key2': [{'key3': [1,2,3,4, {'key4': ['old_value']}]}]}}
obj_key = "obj['key1']['key2'][1]['key3'][4]['key4'][0]"

# 拆分键路径,提取所有节点
path_parts = obj_key.split('[')[1:]
path = []
for part in path_parts:
    cleaned_part = part.strip(']').strip("'\"")
    # 区分索引(数字)和字符串键
    path.append(int(cleaned_part) if cleaned_part.isdigit() else cleaned_part)

# 遍历到目标节点的父级
current_node = obj
for node in path[:-1]:
    current_node = current_node[node]

# 给目标节点赋值
current_node[path[-1]] = "my_new_value"

# 验证结果
print(obj['key1']['key2'][1]['key3'][4]['key4'][0])  # 输出: my_new_value

方案二:用exec替代eval(不推荐,仅临时解决)

如果坚持用字符串拼接的方式,exec支持执行赋值语句,替换即可:

exec(obj_key + ' = "my_new_value"')

注意:exec和eval一样存在安全隐患,若obj_key来自不可信输入,禁止使用此方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:25:20