我有一个嵌套很深的dict,需要迭代它并返回与key
参数(函数的第二个参数)对应的值。
例如,使用
tree = {"a": 12, "g":{ "b": 2, "c": 4}, "d":5}
tree_traverse(tree, "d")
应返回5
下面是我的代码:
def tree_traverse(tree, key):
for k,v in tree.items():
if isinstance(v, dict):
tree_traverse(v, key)
elif k == key:
return v
我遇到的问题是,如果这个函数在迭代完最深嵌套的dict后没有找到匹配的键,它将返回None。我不希望在找到匹配的键之前它返回任何东西。
我没有在另一个线程中找到解决方案,大多数线程使用print语句,不返回任何东西,所以我猜它避免了这个问题。
3条答案
按热度按时间2wnc66cl1#
你必须检查递归调用是否真的找到了一些东西,这样你才能继续循环。例如,尝试以下操作:
1aaf6o9v2#
这里我们在函数创建时示例化了一个对象,这个对象被称为
_marker
,函数的所有执行都将共享这个对象。如果我们没有找到键,我们将返回这个对象。(这里也可以使用None
,但是None
通常是一个有意义的值。)我使用
tree_traverse
作为辅助函数,因为我们希望在递归的最外层(抛出错误)和内部(返回_marker
对象)有不同的行为bnlyeluc3#
一个
NestedDict
可以解决这个问题要安装ndicts
pip install ndicts