<p>回答如下:
<a href="https://stackoverflow.com/questions/14962485/finding-a-key-recursively-in-a-dictionary">Finding a key recursively in a dictionary</a></p>
<p>张贴这一点,以便人们可以遇到的答案,如果他们搜索使用不同的术语。你知道吗</p>
<p>我将使用alecxe的答案,使用Gareth Rees在这里定义的迭代器堆栈模式:<a href="http://garethrees.org/2016/09/28/pattern/" rel="nofollow noreferrer">http://garethrees.org/2016/09/28/pattern/</a></p>
<p>其他链接被破坏时的代码:</p>
<pre><code>def search(d, key, default=None):
"""
Return a value corresponding to the specified key in the (possibly
nested) dictionary d. If there is no item with that key, return
default.
"""
stack = [iter(d.items())]
while stack:
for k, v in stack[-1]:
if isinstance(v, dict):
stack.append(iter(v.items()))
break
elif k == key:
return v
else:
stack.pop()
return default
</code></pre>
<p>此代码允许您避免超出某些其他解决方案中存在的最大递归深度的问题。你知道吗</p>
<p>编辑:意识到你只是想找出字典中是否存在一个值。你知道吗</p>
<p>您可以简单地将for循环修改为这样的内容,它应该可以用于简单的真/假搜索。你知道吗</p>
<pre><code>def search(d, key, default=False):
"""
Return a value corresponding to the specified key in the (possibly
nested) dictionary d. If there is no item with that key, return
default.
"""
stack = [iter(d.items())]
while stack:
for k, v in stack[-1]:
if isinstance(v, dict):
stack.append(iter(v.items()))
break
elif k == key:
return True
elif v == key:
return True
else:
stack.pop()
return default
</code></pre>