<pre><code>from collections import defaultdict
olimpic=[
['Russia', 'bronze', 'basketball_male'],
['China', 'gold', 'soccer_female'],
['China', 'silver', 'judo_male_100kg'],
['Australia', 'gold', 'surf_male'],
['Cuba', 'gold', 'gymnastics_solo_female'],
['Russia', 'silver', 'karate_female_60kg'],
['China', 'silver', 'voleyball_female'],
['Canada', 'silver', 'voleyball_female'],
['Canada', 'silver', 'voleyball_female'],
['Canada', 'gold', 'voleyball_female']]
d = defaultdict(lambda: defaultdict(int))
for x, y, z in olimpic:
d[x].setdefault('gold', 0)
d[x].setdefault('silver', 0)
d[x].setdefault('bronze', 0)
d[x][y] += 1
class C:
def __init__(self, key):
self.key = key
self.values = tuple(d[key].values())
def __lt__(self, other):
if self.values == other.values:
if self.key < other.key:
return True
else:
if self.values > other.values:
return True
l = []
for i in sorted(d, key=C):
l.append(tuple((*d[i].values(), i)))
print(f'Rank of the Countries\n{chr(10).join([str(i) for i in l])}')
</code></pre>
<pre><code>Rank of the Countries
(1, 2, 0, 'Canada')
(1, 2, 0, 'China')
(1, 0, 0, 'Australia')
(1, 0, 0, 'Cuba')
(0, 1, 1, 'Russia')
</code></pre>