いくつかの大きなネストされた辞書からいくつかの値を取得する必要があります。怠惰な私は、最後の子が見つかるか、リーフが空になるまで、自分自身を再帰的に呼び出す関数を作成することにしました。
辞書が飛び出し、新しい呼び出しごとに新しい辞書が構築されるので、これがどれほど効率的か疑問に思います。
助言がありますか?
def recursive_dict_get(item, string, default=False):
if not isinstance(item, dict):
return default
print "called with ", item, "and string", string
if "." in string:
attrs = string.split(".")
parent = attrs.pop(0)
rest = ".".join(attrs)
result = item.get(parent, None)
if result is None:
return default
else:
return recursive_dict_get(item.get(parent, default), rest, default)
else:
return item.get(string, default)
---
foo = {
"1": {
"2": {
"3": {
"4":{
"5": {
"6": {
"7": "juice"
}
}
}
}
}
}
}
print recursive_dict_get(foo, "1.2.3.4.5.6.7", False)
print "*" * 3
print recursive_dict_get(foo, "1.2.3.4.5.6", False)
print "*" * 3
print recursive_dict_get(foo, "1.3", False)