擅长:python、mysql、java
<p>我认为最简单的方法是先按组进行分类,然后分两步进行排序(第一步按组最大值排序,第二步按组内得分排序)。在</p>
<pre><code>data = [[ 5, 0.85, "Europe"],
[ 8, 0.77, "Australia"],
[12, 0.70, "S.America"],
[13, 0.71, "Australia"],
[42, 0.82, "Europe"],
[45, 0.90, "Asia"],
[65, 0.91, "Asia"],
[73, 0.72, "S.America"],
[77, 0.84, "Asia"]]
groups = {}
for idx, score, group in data:
try:
groups[group].append((idx, score, group))
except KeyError:
groups[group] = [(idx, score, group)]
for group in sorted((group for group in groups.keys()),
key = lambda g : -max(x[1] for x in groups[g])):
for idx, score, group in sorted(groups[group], key = lambda g : -g[1]):
print idx, score, group
</code></pre>
<p>最终结果是</p>
^{pr2}$
<p>这与您提供的不同,但是对于您问题中的结果,我认为您有一个输入错误,因为<code>S.America</code>的分数<code>0.87</code>在输入数据中不存在。在</p>