擅长:python、mysql、java
<p>您可以使用<code>itertools.groupby</code>(<a href="https://docs.python.org/3.5/library/itertools.html#itertools.groupby" rel="nofollow noreferrer">doc</a>)。首先,我们按您的条件对项目进行排序,然后按标记对它们进行分组(并且只存储每组中的第一个项目):</p>
<pre><code>from itertools import groupby
from collections import namedtuple
Data = namedtuple('Data', ('tag', 'rank'))
n = 3
algorithm_input = { Data('a', 200), Data('a', 100), Data('b', 50), Data('c', 10), Data('d', 5) }
# 1. sort the data by rank (descending) and tag (ascending)
s = sorted(algorithm_input, key=lambda k: (-k.rank, k.tag))
# 2. group the data by tag and store first item from each group to 'out', limit the number of groups to 'n'
out = []
for (_, g), _ in zip(groupby(s, lambda k: k.tag), range(n)):
out.append(next(g))
print(out)
</code></pre>
<p>印刷品:</p>
<pre><code>[Data(tag='a', rank=200), Data(tag='b', rank=50), Data(tag='c', rank=10)]
</code></pre>
<p>编辑:更改排序键。你知道吗</p>