擅长:python、mysql、java
<p>你觉得<code>dict(test)</code>的输出怎么样</p>
<pre><code>{'ent1': 4, 'ent2': 3.5, 'ent3': 4.5}
</code></pre>
<p>或者,您可能希望将其转换回具有</p>
<pre><code>>>> list(dict(test).items())
[('ent1', 4), ('ent2', 3.5), ('ent3', 4.5)]
</code></pre>
<p>编辑:这将保留最后一个指定值,但您也可以通过颠倒列表中的第一个值来保留第一个指定值:</p>
<pre><code>>>> list(dict(reversed(test)).items())
[('ent2', 12), ('ent1', 24), ('ent3', 4.5)]
</code></pre>
<p>Edit2:如果你也想保持列表顺序,这似乎是一个很好的单行解决方案(受Julien答案的启发):</p>
<pre><code>>>> [(uk,next(v for k,v in test if k == uk)) for uk in dict(test).keys()]
[('ent1', 24), ('ent2', 12), ('ent3', 4.5)]
</code></pre>
<p>最后,使用functools.reduce可以获得另一个一行:</p>
<pre><code>>>> from functools import reduce
>>> reduce(lambda lu,i:i[0] in dict(lu).keys() and lu or lu+[i], test, [])
[('ent1', 24), ('ent2', 12), ('ent3', 4.5)]
</code></pre>
<p>说明:<code>lu</code>是仅具有唯一键的列表,<code>i</code>是<code>test</code>列表中的下一项。如果<code>i[0]</code>,即下一个元素的键已经在<code>lu</code>中,我们保持<code>lu</code>,否则我们追加<code>i</code></p>