如何过滤生成器表达式中的值

时间:2018-01-11 15:03:14

标签: python dictionary list-comprehension conditional-operator generator-expression

我的下面的函数是计算嵌套字典的深度。

#!/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')

为什么我的过滤器无法工作?如何使其工作?

1 个答案:

答案 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