Dictionaries – Solution [3]

SOURCE_TRANSLITERATION_TABLE_UA_GB = """
а a
б b
в v
г h
ґ g
д d
е e
є ye
ж zh
з z
и ȳ
і i
ї yi
й ĭ
к k
л l
м m
н n
о o
п p
р r
с s
т t
у u
ф f
х kh
ц ts
ч ch
ш sh
щ shch
ь ʼ
ю yu
я ya
’ ˮ
"""


CITIES_UA = [
    "Київ",
    "Чернігів",
    "Одеса",
    "Львів",
    "Полтава",
    "Запоріжжя",
    "Евпатория",
    "Маріуполь",
    "Донецьк",
    "Миколаїв",
    "Ужгород",
    "Рівне",
    "Луцьк"
]


def parse_table(source):
    """ Parse string table. """
    table = []
    for line in source.splitlines():
        row = line.split()
        if row: # ignore empty lines
            table.append(tuple(row))
    return dict(table)


def add_capitals(table):
    """ Add capital letters to the transliteration table. """
    new_table = {}
    for source, transcription in table.items():
        new_table[source] = transcription
        new_table[source.upper()] = transcription.capitalize()
    return new_table


def transliterate(table, string):
    """ Transliterate string using the given table. """
    result = []
    for letter in string:
        result.append(
            table.get(letter, letter)
        )
    return "".join(result)


table = parse_table(SOURCE_TRANSLITERATION_TABLE_UA_GB)
table = add_capitals(table)

for name in CITIES_UA:
    print(f"{name} [{transliterate(table, name)}]")

The result should look like:

Київ [Kȳyiv]
Чернігів [Chernihiv]
Одеса [Odesa]
Львів [Lʼviv]
Полтава [Poltava]
Запоріжжя [Zaporizhzhya]
Евпатория [Evpatorȳya]
Маріуполь [Mariupolʼ]
Донецьк [Donetsʼk]
Миколаїв [Mȳkolayiv]
Ужгород [Uzhhorod]
Рівне [Rivne]
Луцьк [Lutsʼk]