<p>我的解决方案是使用列表理解。这是迭代和删除任何不需要的项的最佳方法。下面是一个如何工作的示例:</p>
<pre><code>dic = {1: {"alert1" : 0, "alert2": 1, "alert3" : 3, "alert4": 1},
2: {"alert1" : 45, "alert2": 2, "alert3" : 0, "alert4": 54},
3: {"alert1" : 2, "alert2": 1, "alert3" : 33, "alert4": 11},
4: {"alert1" : 1, "alert2": 0, "alert3" : 2, "alert4": 0}}
for key in dic:
value = dic[key]
keys = {k:v for (k, v) in value.items() if v != 0}
print(keys)
</code></pre>
<p>在这里,您所做的唯一过滤发生在for iteration循环上,如果值不是0,则循环遍历所有键</p>
<p>此解决方案更可取,因为它使用pythonicdictionary comprehension,它允许您在一个简单的行中整齐地迭代单个dict中的每个项目。相对于循环,这是一种更有益的方法,因为Python可以轻松地优化列表理解以提高效率</p>
<p><strong>变体</strong></p>
<p>如果要修改现有字典,只需在迭代时修改键,如下所示:</p>
<pre><code>for key in dic:
value = dic[key]
updated = {k:v for (k, v) in value.items() if v != 0}
dic[key] = updated
</code></pre>
<p>如果要复制,只需创建另一个字典并添加它:</p>
<pre><code>new_dict = {}
for key in dic:
value = dic[key]
updated = {k:v for (k, v) in value.items() if v != 0}
new_dict[key] = updated
</code></pre>
<p>可以看到这些方法<a href="https://repl.it/@EnochKumala/GainsboroSpitefulJavascript" rel="nofollow noreferrer">here</a>(注释掉)</p>