<p>以下是解决方案:</p>
<pre><code>result = collections.OrderedDict(sorted(my_dic.items(),key = lambda x: (-x[1]['Points'], -x[1]['win'], x[0])) )
</code></pre>
<p>也就是说,如果你正在排序一个<code>dict</code>。。。您可能不应该使用<code>dict</code>。。。
考虑使用类似于<code>namedtuple</code>的东西。你知道吗</p>
<pre><code>from collections import namedtuple
my_dic = {
'Iran': {'Points': 4, 'win': 1, 'lose': 1, 'drawes': 1, 'diffrence': 0},
'Spain': {'Points': 5, 'win': 1, 'lose': 0, 'drawes': 2, 'diffrence': 2},
'Portugal': {'Points': 4, 'win': 1, 'lose': 1, 'drawes': 1, 'diffrence': 0},
'Morocco': {'Points': 3, 'win': 1, 'lose': 2, 'drawes': 0, 'diffrence': -2}
}
Country = namedtuple("Country", "name stats")
Stats = namedtuple("Stats", "points win lose drawes difference")
countries = []
for key, value in my_dic.items():
temp_stat = Stats(value["Points"], value["win"], value["lose"], value["drawes"], value["diffrence"])
countries.append(Country(key, temp_stat))
def sort_funct(x):
# The order in which we want to sort by
return (-x.stats.points, -x.stats.win, x.name)
countries.sort(key=sort_funct)
for country in countries:
print_str = "{} has {} points and {} wins".format(country.name, country.stats.points, country.stats.win)
print(print_str)
</code></pre>
<p><strong>输出:</strong></p>
<pre><code>Spain has 5 points and 1 wins
Iran has 4 points and 1 wins
Portugal has 4 points and 1 wins
Morocco has 3 points and 1 wins
</code></pre>