以下の私の関数は、ネストされた辞書の深さを計算しています。
#!/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')
フィルターが機能しないのはなぜですか? また、フィルターを機能させるにはどうすればよいですか?