Вы можете использовать itertools.groupby
:
def print_data(league_results):
grouped_results = itertools.groupby(
sorted(league_results.items(), key=lambda x: x[1], reverse=True),
key=lambda x: x[1]
)
for i, (_, teams) in enumerate(grouped_results, 1):
for team, points in teams:
print('{}. {}, {}'.format(i, team.strip(''), points))
Результаты:
1. Man City, 6
2. Liverpool, 5
3. Everton, 1
3. Stoke, 1
4. Fulham, 0
Здесь у вас есть живой пример
Объяснение:
groupby
сделает итерацию с совпадением количества очков и команд (сгруппирует их, если они отсортированы), давая нам итерацию (points, [(team, points), ...]), ...
.Следовательно, при его перечислении вы будете перечислять эти группы, это будет наш индекс i
.Поскольку мы хотим, чтобы перечисление начиналось с 1
вместо 0
, мы просто просим функцию начать с него enumerate(iterable, start_enumerate_value)