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

Python多层字典中高效查询指定key是否存在的实现方法

多层嵌套字典key存在性判断方案

1. 仅判断顶层key(如示例中的"Poh-45")

Python字典的in运算符基于哈希表实现,时间复杂度为O(1),哪怕字典体量极大也能高效查询,直接用如下逻辑即可匹配你的需求:

mapper = {
    "Pog-345": {"DFH":['13062519','13063013','13063543','13072434','13123190']},
    "Pog-347": {"Hetive":['82722892'],"TFH":['14326471','50059137','54250307','15681953','76433609']},
    "Poh-45": {}
}
target_key = "Poh-45"

if target_key in mapper:
    target_val = mapper[target_key]
    if target_val: # 空字典、空列表等空值会自动判定为False
        # 此处写入你要执行的计算逻辑
        print(f"key存在且非空,值为{target_val}")
    else:
        # 存在但为空,进入下一步流程
        print("key存在但值为空,进入下一步")
else:
    # key不存在,进入下一步流程
    print("key不存在,进入下一步")

空字典{}、空列表[]等空值在布尔判断中默认返回False,刚好匹配你「存在且非空才执行计算」的需求。

2. 判断任意嵌套层级的key

如果你需要判断的是第二层及更深的key(比如示例中的"TFH"、"DFH"),分两种场景选择方案:

2.1 单次/少量查询

用深度优先遍历实现,可避免递归深度超限问题:

def check_nested_key(d: dict, target: str) -> tuple[bool, any]:
    """返回(是否存在, 对应值),不存在返回(False, None)"""
    stack = list(d.items())
    visited = set() # 防止字典循环引用导致死循环
    while stack:
        k, v = stack.pop()
        if id(v) in visited:
            continue
        if k == target:
            return True, v
        if isinstance(v, dict):
            visited.add(id(v))
            stack.extend(v.items())
        # 若嵌套结构存在列表包裹字典的场景,放开下方注释即可
        # elif isinstance(v, list):
        #     for item in v:
        #         if isinstance(item, dict):
        #             visited.add(id(item))
        #             stack.extend(item.items())
    return False, None

# 调用示例
exist, val = check_nested_key(mapper, "TFH")
if exist and val:
    # 执行计算逻辑
else:
    # 进入下一步流程

2.2 频繁多次查询

提前一次性构建全量key的扁平化索引,后续所有查询都为O(1),适合查询次数多的场景:

def build_flat_index(d: dict) -> dict:
    """构建所有层级key到值的映射索引,重复key默认保留最后出现的,可按需调整"""
    flat_index = {}
    stack = list(d.items())
    visited = set()
    while stack:
        k, v = stack.pop()
        if id(v) in visited:
            continue
        flat_index[k] = v
        if isinstance(v, dict):
            visited.add(id(v))
            stack.extend(v.items())
        # 列表嵌套字典的逻辑同上,按需添加
    return flat_index

# 仅需构建一次索引
index = build_flat_index(mapper)
# 后续查询直接走O(1)的哈希查找
if "DFH" in index and index["DFH"]:
    # 执行计算逻辑
else:
    # 进入下一步流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:54:01