Задача про словарь

Сегодня я разберу одну из олимпиадных задач, довольно простую.

Суть задачи в том, чтобы из англо-латинского словаря сделать латино-английский.

Примеры тестов

Входные данные

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 (оно нам не понадобится); создаём пустой словарь.

Отделяем слово от его переводов; из строки с переводами получаем список латинских слов.

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

Открываем файл на запись. Первой строкой записываем число получившихся слов. Далее в отсортированном порядке записываем латинские слова, затем их переводы. Закрываем файл.

Задача решена, все тесты пройдены. Несомненно, возможны и другие решения, но это мне показалось наиболее красивым.

Для вставки кода на Python в комментарий заключайте его в теги <pre><code class="python3">Ваш код</code></pre>
Опечатка в тексте:
Послать сообщение об ошибке автору?