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

递归查找字典目标键并列出所有父键的Python实现问题

递归查找字典中目标键的所有父键

需求和《Finding a key recursively in a dictionary》类似,但找到目标键后需要列出指向它的所有父键。逻辑上明确要在遍历字典时记录路径,未找到目标键则回溯路径,但不清楚如何用Python实现。当前代码仅能返回包含目标键的列表:

def list_parents(obj, key):
    path = []
    if key in obj: 
        path.append(key)
        return path

    for k, v in obj.items():
        if isinstance(v, dict):
            path.extend(list_parents(v, key))

    return path

解决思路与实现

要记录父键路径,核心是在递归过程中传递当前积累的路径,找到目标键时返回完整路径,未找到则回溯。修改后的代码如下:

def list_parents(obj, target_key, current_path=None):
    # 初始化当前路径,避免默认参数的可变对象问题
    if current_path is None:
        current_path = []
    
    # 当前字典包含目标键,返回完整路径(父键链+目标键)
    if target_key in obj:
        return current_path + [target_key]
    
    # 遍历子字典,递归查找
    for key, value in obj.items():
        if isinstance(value, dict):
            # 递归时将当前父键加入路径
            found_path = list_parents(value, target_key, current_path + [key])
            # 找到结果就直接返回,无需继续遍历
            if found_path:
                return found_path
    
    # 所有分支都没找到目标键,返回None
    return None

代码说明

  • current_path参数用于在递归中传递已遍历的父键,每次进入子字典时,将当前父键加入路径
  • 找到目标键时,返回current_path + [target_key],其中current_path就是所有父键的列表
  • 若遍历完所有子节点都未找到目标键,返回None表示未匹配

使用示例

假设有如下测试字典:

test_dict = {
    "level1": {
        "level2": {
            "level3": "value",
            "target_key": "result"
        },
        "another_level2": {}
    },
    "other_level1": {}
}

调用list_parents(test_dict, "target_key")会返回['level1', 'level2', 'target_key'],其中['level1', 'level2']就是目标键的所有父键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:48:16