首页 > 解决方案 > 检查字典是否没有所有键的值

问题描述

检查嵌套字典是否没有所有键的值的最佳方法是什么?

例如:

dict = {
    'var1': [],
    'var2': {
        'var3': [],
        'var4': {}
    },
    'var5': {}
}

bool()返回True,因为它不是严格意义上的空字典。

递归是可行的,但我很好奇在性能和代码长度方面是否有“更好”的方法来做到这一点——也许是任何包函数。

def get_val(d):
    val = []
    for k,v in d.items():
        if (v):
            if (type(v) is dict):
                if (not get_val(v)):
                    return False
            else:
                return False
    return True

标签: pythondictionary

解决方案


澄清一下,此方法适用于嵌套组合dict/list结构,因为这就是您在示例中显示的内容

def empty(d):
    if isinstance(d, dict):
        return all(empty(sub) for _, sub in d.items())
    if isinstance(d, list):
        return all(empty(sub) for sub in d)
    return False

这当然更短,但它仍然是递归的。钻研一个任意嵌套的结构是一个固有的递归问题。

bool此外,您可能会注意到此函数消除了对任何对象的隐含性的任何依赖。原因是虽然一个空list []的和空的 dict{}评估为假,但其他类似零的对象也是如此,例如0, 0.0, ''


推荐阅读