Задача про словарь
Сегодня я разберу одну из олимпиадных задач, довольно простую.
Суть задачи в том, чтобы из англо-латинского словаря сделать латино-английский.
Примеры тестов
Входные данные 3 apple - malum, pomum, popula fruit - baca, bacca, popum punishment - malum, multa
Выходные данные 7 baca - fruit bacca - fruit malum - apple, punishment multa - punishment pomum - apple popula - apple popum - fruit
Входные данные черпаются из input.txt, вывод сбрасывается в output.txt. Довольно стандартное требование, про работу с файлами в python я недавно писал. Входные данные лексикографически отсортированы, и выходные данные тоже требуются отсортированными.
Вначале я покажу своё решение, потом начну объяснять. Итак, моё решение:
f = open('input.txt') N = f.readline() d = {} for line in f: words = line.strip().split(' - ') en = words[0] lat = words[1].split(', ') for key in lat: if key in d: d[key].append(en) else: d[key] = [en] f.close() for key in d: d[key].sort() g = open('output.txt', 'w') g.write(str(len(d)) + '\n') for lat in sorted(d): g.write(lat + ' - ' + ', '.join(d[lat]) + '\n') g.close()
А теперь объяснение. Приготовились... :)
Открываем файл, читаем число N (оно нам не понадобится); создаём пустой словарь.
Отделяем слово от его переводов; из строки с переводами получаем список латинских слов.
Далее смотрим, есть ли латинское слово в нашем словаре. Если есть - дописываем ещё один английский перевод. Если нет - пишем его. После махинаций закрываем файл. Далее нужно все списки переводов отсортировать (требования задачи).
Открываем файл на запись. Первой строкой записываем число получившихся слов. Далее в отсортированном порядке записываем латинские слова, затем их переводы. Закрываем файл.
Задача решена, все тесты пройдены. Несомненно, возможны и другие решения, но это мне показалось наиболее красивым.