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

Python:如何高效获取类中嵌套字典的所有键值?

获取嵌套字典所有键值的最优高效方法

嘿,这个问题我经常碰到——处理嵌套字典时要把所有层级的键值都捞出来对吧?你现在的代码只能处理一层嵌套的子字典键,没法应对更深的结构,而且在效率和扩展性上还有提升空间。下面给你两种最优方案,根据你的字典规模选就行:

1. 迭代法(高效推荐,适合大字典)

迭代用栈来遍历所有层级,能避免递归的栈溢出问题,速度更快,尤其当字典结构复杂、数据量大时表现更好。而且用生成器的写法还能省内存,不用一次性把所有结果都存起来。

def get_all_key_values(nested_dict):
    stack = list(nested_dict.items())
    while stack:
        key, value = stack.pop()
        if isinstance(value, dict):
            stack.extend(value.items())
        else:
            yield (key, value)

# 用你的示例数据测试
data = {
    "BANK": {
        "no_data": "INT",
    },
    "SHOCK": {
        "drop": "NOTI",
        "rise": "NOTI",
        "high_risk": "ALERT",
    },
    "OFFLINE": {"online": None, "offline_few": "ALERT"},
}

# 遍历所有键值对
for k, v in get_all_key_values(data):
    print(f"键: {k}, 值: {v}")

运行后会输出所有层级的键值:

键: online, 值: None
键: offline_few, 值: ALERT
键: drop, 值: NOTI
键: rise, 值: NOTI
键: high_risk, 值: ALERT
键: no_data, 值: INT

2. 递归法(简洁易读,适合小字典)

如果你的字典嵌套层级不深(比如不会超过1000层,Python默认递归深度限制),递归写法会更简洁直观,代码量少,容易理解。

def get_all_key_values_recursive(nested_dict):
    for key, value in nested_dict.items():
        if isinstance(value, dict):
            # 递归遍历子字典,用yield from直接返回结果
            yield from get_all_key_values_recursive(value)
        else:
            yield (key, value)

# 用法和上面完全一样
for k, v in get_all_key_values_recursive(data):
    print(f"键: {k}, 值: {v}")

不过要注意,如果嵌套层级极深,递归会抛出RecursionError,所以这种方法更适合结构简单的小字典。

补充:如果只需要所有键(不是键值对)

要是你的需求只是获取所有层级的键(不管对应的值),可以直接基于上面的生成器来提取:

all_keys = [k for k, v in get_all_key_values(data)]
print(all_keys)
# 输出: ['online', 'offline_few', 'drop', 'rise', 'high_risk', 'no_data']

为什么你的现有代码不够用?

你现在的代码for k,v in data.items(): print v.keys()只能遍历第一层字典的value对应的子字典的键,比如只能拿到no_data、drop这些,但如果有更深的嵌套(比如BANK里的no_data又是一个字典),就会漏掉深层的键,而且没法获取完整的键值对应关系,扩展性很差。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:42:52