python - 检查字典是否没有所有键的值
问题描述
检查嵌套字典是否没有所有键的值的最佳方法是什么?
例如:
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
解决方案
澄清一下,此方法适用于嵌套组合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
, ''
。
推荐阅读
- docker - 无法通过 docker-compose.yml 中的“标签”设置 Traefik
- jquery - 添加新 div 时背景图像不透明度增加
- css - 网站和 Invsion(设计师和前端开发人员工具)之间的字体差异
- arduino - Arduino IDE 可以使用 avrdude 来刷 hex 文件,但是 ubuntu 上的命令行不能
- javascript - 如何获取 HTTP 请求的类型
- javascript - 函数名称是否也应该反映在 promise.then() 上称为回调的函数的操作?
- javascript - 将文字数字(三)乘以 1(四)
- ios - 是否可以更改 UINavigationBar 的字体大小
- c# - 二次方程求解器不起作用
- python - 由于我的优化器,我的 Keras 神经网络精度是否总是停留在 ~0.55 左右?