递归查找字典目标键并列出所有父键的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
相关产品推荐
相关产品推荐

