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

如何在深度嵌套字典中按值反向查找完整键路径

深度嵌套字典的反向键路径查找

需求说明

需要实现一个功能:给定深度嵌套的Python字典,根据输入的目标值,反向查找指向该值的完整上层键路径。例如输入值האבדנו时,需获取完整路径:אנחנו(直接键)→ עבר(二级键)→ הפעיל(三级键)→ אבד(顶层键)。

现有尝试的问题

  • 递归yield方法仅能获取直接键,无法跟踪完整路径;
  • 多层循环方法固定了嵌套层级,扩展性差,一旦字典嵌套深度变化就会失效。

解决方案:递归+回溯实现路径跟踪

以下是通用的递归回溯实现,可处理任意深度的嵌套字典,且能找到所有匹配目标值的路径:

def find_key_path(dictionary, target, current_path=None):
    if current_path is None:
        current_path = []
    for key, value in dictionary.items():
        current_path.append(key)
        # 找到目标值,返回当前路径的副本(避免后续修改影响结果)
        if value == target:
            yield current_path.copy()
        # 如果当前值是字典,递归查找子层级
        elif isinstance(value, dict):
            yield from find_key_path(value, target, current_path)
        # 回溯:移除当前键,处理下一个键
        current_path.pop()

代码说明

  1. 路径跟踪:通过current_path参数记录当前遍历的键路径;
  2. 递归遍历:遇到子字典时,递归进入继续查找;
  3. 回溯机制:处理完当前键的所有子项后,将其从路径中移除,保证路径的正确性;
  4. 多路径支持:使用yield返回所有匹配的路径(如果同一个值出现在多个位置)。

测试示例

使用你的嵌套字典my_dict进行测试:

target_value = "האבדנו"
# 获取所有匹配的路径
all_paths = list(find_key_path(my_dict, target_value))

for idx, path in enumerate(all_paths, 1):
    print(f"匹配路径 {idx}: {' -> '.join(path)}")

输出结果

匹配路径 1: אבד -> קל -> עבר -> אנחנו
匹配路径 2: אבד -> נפעל -> עבר -> אנחנו
匹配路径 3: אבד -> פיעל -> עבר -> אנחנו
匹配路径 4: אבד -> הפעיל -> עבר -> אנחנו
匹配路径 5: אבד -> הופעל -> עבר -> אנחנו
匹配路径 6: אבד -> התפעל -> עבר -> אנחנו

可以看到,该方法会找出所有包含目标值האבדנו的完整键路径,完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:05:25