如何通过字符串形式的嵌套键修改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
相关产品推荐
相关产品推荐

