擅长:python、mysql、java
<p>这里有一个解决方案,它以深度优先的方式遍历结构,以找到要检查的“叶”节点是否在要保留的元素列表中。当它找到这样一个元素时,它用<code>del</code>从字典中删除它。(所以这是在适当的地方完成的。)</p>
<pre><code>def fltr(d, vals):
if isinstance(d, dict):
vals_to_del = []
for k in d:
if k in vals:
continue
if not isinstance(d[k], list) and not isinstance(d[k], dict):
if k not in vals:
vals_to_del.append(k)
else:
fltr(d[k], vals)
for k in vals_to_del:
del d[k]
elif isinstance(d, list):
for i in d:
fltr(i, vals)
</code></pre>
<p>请注意,我没有定义一个名为<code>filter</code>的函数,因为它是一个内置函数,您不想隐藏它。在</p>
^{pr2}$