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

Python3:根据字符串路径删除嵌套JSON中的指定键

如何根据可变长度路径删除嵌套字典中的指定键?

需求场景

需要根据传入脚本的可变长度字符串路径,在嵌套JSON(字典)中使用pop()方法删除指定键,且需支持任意层级的键路径。

问题示例

给定字典{'IP': {'key1': 'val1', 'key2': 'val2'}},当传入路径字符串IP.key1时,需要删除其中的key1键。

目前找到一段能定位目标键但无法实现删除的递归代码:

data = {'IP': {'key1': 'val1', 'key2': 'val2'}}
lst = ['IP', 'key1'] # 将键字符串转换为数组
def get(d,l):
    if len(l)==1: return d[l[0]]
    return get(d[l[0]],l[1:])
print(get(data, lst))

由于环境受限,无法使用小众库,希望基于这段代码修改实现删除功能,但对递归逻辑感到困惑。

可行解决方案

基于Filip Müller的方案,已实现支持任意层级的删除功能,以下是复杂数据集的验证示例:

data = {'IP': {'key1': {'key3': {'key4': 'val4', 'key5': 'val5'}}, 'key2': 'val2'}}
lst = ['IP', 'key1', 'key3', 'key4']
def popKey(d, l):
    current_level = d
    # 遍历到目标键的父层级字典
    for key in l[:-1]:
        current_level = current_level[key]
    # 在父层级上执行pop删除目标键
    current_level.pop(l[-1])
    return d
print(popKey(data, lst))

方案说明

  1. 先将路径字符串分割为键列表(例如IP.key1分割为['IP', 'key1'])
  2. 通过循环遍历到目标键的父层级字典,而非直接定位目标值
  3. 最后在父层级上调用pop()方法,这样就能直接修改原嵌套字典的结构

原代码无法删除的原因

原递归函数get()仅返回目标键对应的值,没有保留对父层级字典的引用,因此无法通过它执行删除操作。而上述方案通过跟踪父层级,解决了这个核心问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:54:04