<p>可以使用dict对元素进行分组,始终使用较小的第二个元素保留子列表:</p>
<pre><code>l = [[1, 2, 3], [1, 3, 4], [1, 4, 5], [2, 4, 3], [2, 5, 6], [2, 1, 3]]
d = {}
for sub in l:
k = sub[0]
if k not in d or sub[1] < d[k][1]:
d[k] = sub
</code></pre>
<p>也可以将两个键传递给sorted,不需要调用sorted两次:</p>
^{pr2}$
<p>如果您想按照<em>维护dict中的顺序,则需要保留顺序。</em>:</p>
^{3}$
<p>但不确定这是否合适,因为你在排序之后的数据,所以你会失去任何顺序。在</p>
<p>您可能会发现非常有用的是<a href="http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html" rel="nofollow">sortedcontainers.sorteddict</a>:</p>
<blockquote>
<p>A SortedDict provides the same methods as a dict. Additionally, a SortedDict efficiently maintains its keys in sorted order. Consequently, the keys method will return the keys in sorted order, the popitem method will remove the item with the highest key, etc.</p>
<p>An optional key argument defines a callable that, like the key argument to Python’s sorted function, extracts a comparison key from each dict key. If no function is specified, the default compares the dict keys directly. The key argument must be provided as a positional argument and must come before all other arguments.</p>
</blockquote>
<pre><code>from sortedcontainers import SortedDict
l = [[1, 2, 3], [1, 3, 4], [1, 4, 5], [2, 4, 3], [2, 5, 6], [2, 1, 3]]
d = SortedDict()
for sub in l:
k = sub[0]
if k not in d or sub[1] < d[k][1]:
d[k] = sub
print(list(d.values()))
</code></pre>
<p>它有您想要的所有方法<a href="http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html#sortedcontainers.SortedDict.d.bisect" rel="nofollow">bisect</a>,<a href="http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html#sortedcontainers.SortedDict.d.bisect_left" rel="nofollow">bisect_left</a>等。。在</p>