回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我只想按降序查找前3个不同的项。如果有决胜局,按字母顺序排序。如果有3个或更少的项目,返回不同的项目列表就足够了</p>
<p>所以如果我有:<code>["a","a","b","b","c","c","c","d","d","d","d"]</code>的输入</p>
<p>输出将是<code>["d","c","a"]</code></p>
<p>因为d有4个计数,c3计数<code>a</code>和<code>b</code>的频率相同,但<code>a</code>按字母顺序排在第一位</p>
<p>在MySQL中,我通常会使用:</p>
<pre><code>SELECT id, COUNT(*) as frequency FROM mylist GROUP BY id ORDER BY frequency, id
</code></pre>
<p>在Python中如何实现这一点</p>
<p>我基于<a href="https://stackoverflow.com/questions/66667844/how-to-order-it-and-count-in-python/66667887#66667887">SAI SANTOH CHIRAG's solution</a>使用此代码:</p>
<pre><code>def main(output):
arr = sorted(output,key=lambda i:[output.count(i),-ord(i)],reverse=True)
out = []
for i in arr:
if i not in out: out.append(i)
print(out[:3])
</code></pre>
<p>但为什么结果是这样的:</p>
<pre><code>Input (stdin) = a a a b b c d d d d
output = ['d']
['d']
['d']
['d']
['d', 'a']
['d', 'a']
['d', 'a']
['d', 'a', 'b']
['d', 'a', 'b']
['d', 'a', 'b']
</code></pre>
<p>而不是我想要的,那就是:</p>
<pre><code>['d','a','b']
</code></pre>