擅长:python、mysql、java
<p>IIUC,使用<code>itertools.groupby</code>:</p>
<pre><code>from itertools import groupby
f = lambda x:x[1]
[max(g, key=lambda x: x[-1]) for k, g in groupby(sorted(l, key=f), key=f)]
</code></pre>
<p>注意:如果您确定第二个条目已排序,则可以跳过<code>sorted</code></p>
<p>输出:</p>
<pre><code>[['abgefahren', 'abgefahr', 58],
['abgegeben', 'abgegeb', 339]]
</code></pre>
<p>最内部的解释:</p>
<ol>
<li><p><code>sorted(l, key=f)</code>:根据<code>f</code>对<code>l</code>进行排序,即使用<code>l</code>中每个子列表的第二个条目。这是因为<code>itertools.groupby</code>无法处理未排序的列表(尽管具有相同的键,但它会生成单独的组)</p></li>
<li><p><code>groupby(sorted(l, key=f), key=f)</code>:然后使用与<code>sorted</code>相同的键对排序的子列表进行分组。因此,与其两次使用相同的lambda,不如使用单键函数<code>f</code></p></li>
<li><p><code>[max(g, key=lambda x:x[-1]) ...]</code>:最后<code>max</code>返回由<code>groupby</code>创建的组中的最大子列表。这一次,最大值是使用子列表的最后一个元素计算的,因此使用了新的lambda</p></li>
</ol>