Как реализовать вывод из словаря value начиная с максимального key в алфавитном порядке?
Несколько команд участвуют в турнире по игре «Что? Где? Когда?». Согласно регламенту турнира, в финал проходит половина команд (с округлением вверх), набравшие больше правильных ответов, чем остальные. Помогите жюри сформировать итоговый протокол.
Формат ввода
На первой строке указано натуральное число N — количество команд.
Далее следует описание результатов N команд в произвольном порядке. Данные о каждой команде записываются на двух строках: на первой — название команды, на второй — количество правильных ответов. Гарантируется, что количество правильных ответов у всех команд разное.
Формат вывода
Нужно вывести на отдельных строках сначала в алфавитном порядке названия всех команд, вышедших в финал (т. е. команд из лучшей по количеству ответов половины), а затем названия всех остальных команд (также на отдельных строках в алфавитном порядке).
вот код, получается он добавляет в словарь , а нужно сейчас как то реализовать вывод только половины команд от общего кол-ва, начиная с максимального результата(в данном примере это две) в алфавитном порядке и потом на отдельных строках остальных команд, которые не вышли в финал тоже в алфавитном порядке
n = int(input())
mass = {}
for i in range(n):
name = input()
res = int(input())
mass[res] = name
n -= 1
Ответы (1 шт):
Я бы сделал так:
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')

