擅长:python、mysql、java
<p>在处理嵌套字典时,我认为它们是一个树,其中键构成了值的路径。考虑到这一点,我创建了一个非递归函数<code>dict_path</code>,它接受一个嵌套字典、密钥路径和一个值以防找不到:</p>
<pre><code>def dict_path(dic, path, value_if_not_found=None):
path = path.split('.')
try:
for key in path:
dic = dic[key]
return dic
except (KeyError, TypeError):
return value_if_not_found
listD = [
{"bar1": {"bar2": 'abcd'}},
{"bar1": {"bar2": None}},
{"bar1": {"bar2": {"bar3": 1234}}},
]
for dic in listD:
value = dict_path(dic, 'bar1.bar2.bar3')
if value == 1234:
print 'Equals 1234:', dic
</code></pre>
<p>函数将继续遍历嵌套字典,直到出现以下三种情况之一:</p>
<ol>
<li>它发现了有问题的价值。在这种情况下,返回该值</li>
<li>在此过程中,对象是一个字典,但没有请求的键。在这种情况下,将引发<code>KeyError</code></li>
<li>对象不是字典,将引发<code>TypeError</code></li>
</ol>
<p>对于情况2和3,我们只返回<code>value_if_not_found</code></p>