0

以下の私の関数は、ネストされた辞書の深さを計算しています。

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

フィルターが機能しないのはなぜですか? また、フィルターを機能させるにはどうすればよいですか?

4

1 に答える 1