擅长:python、mysql、java
<p>根据python版本的不同,您可能只需要使用<a href="http://legacy.python.org/dev/peps/pep-0274/" rel="nofollow">dict comprehension</a>一行就可以完成这项工作:</p>
<pre><code>>>> d2 = {k:[v for v in values if not v in d.get(max(d.keys()))] for k, values in d.items()}
>>> d2
{'v01': ['elem_E'], 'v02': ['elem_D'], 'v03': []}
</code></pre>
<p>这将把dict<code>d</code>的一个副本放在一起,其中包含的列表将从max键中存储的所有项中剥离出来。最终的dict看起来或多或少像你想要的。
如果不希望在键<code>v03</code>处使用空列表,请将结果本身包装到另一个dict中:</p>
<pre><code>>>> {k:v for k,v in d2.items() if len(v) > 0}
{'v01': ['elem_E'], 'v02': ['elem_D']}
</code></pre>
<p>编辑:</strong></em>
如果您的原始dict有一个非常大的键集[<em>或者经常需要执行上述操作,</em>],那么您可能还希望用一些先前分配的列表变量来替换表达式<code>d.get(max(d.keys()))</code>,以获得性能[<em><strike>,但我不确定它是否确实没有得到预先计算。<strong>这会将整个过程的速度提高近100%。下面的表达式在我的机器上以1.5秒的时间运行100000次,而未替换的表达式需要3秒以上。你知道吗</p>
<pre><code>>>> bl = d.get(max(d.keys()))
>>> d2 = {k:v for k,v in {k:[v for v in values if not v in bl] for k, values in d.items()}.items() if len(v) > 0}
</code></pre>