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

从Python嵌套字典中提取子字典空值项并跳过无空值的顶级键

解决方案

核心逻辑:在外层字典推导式中增加判断,仅当内层过滤得到的子字典非空时,才保留对应的顶级键项,同时修正原代码中覆盖内置dict的坏实践。

修正步骤

  1. 替换原变量名(避免覆盖内置dict类型,否则后续使用内置dict构造函数时会报错):
    nested_dict = {'a': {'name': 'Sam', 'likes': 'Cookies'},
            'b': {'name': 'Margaret', 'likes': None},
            'c': {'name': None, 'likes': None}}
    
  2. 增加外层过滤条件,根据运行环境选择对应写法:

    写法1:Python 3.8+ 推荐(使用海象运算符,简洁高效)

    result = {
        top_key: filtered_sub
        for top_key, sub in nested_dict.items()
        # 海象运算符直接计算过滤后的子字典,非空则保留该顶级键项
        if (filtered_sub := {k: v for k, v in sub.items() if not v})
    }
    
    运行输出:
    {'b': {'likes': None}, 'c': {'name': None, 'likes': None}}
    

    写法2:兼容旧Python版本(无需海象运算符)

    支持Python3.7及更早版本,通过内层遍历单元素列表临时存储过滤后的子字典,避免重复计算:
    result = {
        top_key: filtered_sub
        for top_key, sub in nested_dict.items()
        for filtered_sub in [{k: v for k, v in sub.items() if not v}]
        if filtered_sub
    }
    
    输出与上述写法完全一致。

原问题根因

原推导式外层无任何过滤条件,哪怕内层遍历子字典后没有符合条件(值为空)的键值对、生成的子字典为空,也会将对应的顶级键项(如'a': {})加入最终结果,增加外层非空判断即可跳过这类空项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 12:36:02