我的下面的函数是计算嵌套字典的深度。
#!/usr/bin/env python3
def get_dict_depth(d, depth=0):
if not isinstance(d, dict) or not d:
return depth
return max(get_dict_depth(v, depth+1) if k != 'id' else depth for k, v in d.items())
foobar = {
"key1" : "val1",
"key2" : {
"id" : "val2"
},
"new_d" : {
"key" : "val",
"key2" : {
"id" : "blabla",
"key" : {
"id" : "blabla",
}
},
}
}
depth = get_dict_depth(foobar)
print("Depth %d" % depth)
我想将其修改为不包括深度计算中值为id
的键。如果我在生成器表达式中使用三元数,该程序可以工作:
return max(get_dict_depth(v, depth+1) if k != 'id' else depth for k, v in d.items())
但我似乎无法通过过滤来实现它:
return max(get_dict_depth(v, depth+1) for k, v in d.items() if k != 'id')
为什么我的过滤器无法工作?如何使其工作?
答案 0 :(得分:0)
将支票移至get_dict_depth
功能:
def get_dict_depth(d, depth=0):
if not isinstance(d, dict) or not d or 'id' in d:
return depth
return max(get_dict_depth(v, depth+1) for v in d.values())
这给了我结果:
Depth 2