Как реализовать вывод из словаря value начиная с максимального key в алфавитном порядке?

Несколько команд участвуют в турнире по игре «Что? Где? Когда?». Согласно регламенту турнира, в финал проходит половина команд (с округлением вверх), набравшие больше правильных ответов, чем остальные. Помогите жюри сформировать итоговый протокол.

Формат ввода

На первой строке указано натуральное число N — количество команд.

Далее следует описание результатов N команд в произвольном порядке. Данные о каждой команде записываются на двух строках: на первой — название команды, на второй — количество правильных ответов. Гарантируется, что количество правильных ответов у всех команд разное.

Формат вывода

Нужно вывести на отдельных строках сначала в алфавитном порядке названия всех команд, вышедших в финал (т. е. команд из лучшей по количеству ответов половины), а затем названия всех остальных команд (также на отдельных строках в алфавитном порядке).

вот код, получается он добавляет в словарь , а нужно сейчас как то реализовать вывод только половины команд от общего кол-ва, начиная с максимального результата(в данном примере это две) в алфавитном порядке и потом на отдельных строках остальных команд, которые не вышли в финал тоже в алфавитном порядке

n = int(input())
mass = {}
for i in range(n):
  name = input()
  res = int(input())
  mass[res] = name
  n -= 1

введите сюда описание изображения

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Zhihar

Я бы сделал так:

import math

data = [("Муми-тролли", 15), ("Снорки", 20), ("Хемули-ЧГКшник", 24), ("Хемули -- не ЧГКшники", 1), ("Тофсла и Вифсла", 9), ("Морра", 5), ("Ондатр", 13)]

# отсортировать список команд по убыванию очков
data.sort(key=lambda obj: -obj[1])

# определить кол-во победивших команд
border = math.ceil(len(data) / 2)

# получить список команд победителей и проигравших, легсографически отсортированных
winners = sorted(data[:border], key=lambda obj: obj[0])
loosers = sorted(data[border:], key=lambda obj: obj[0])

# вывести итоговый список
print(*map(lambda obj: obj[0], winners + loosers), sep='\n')
→ Ссылка