Если вы думаете о текстах и шаблонах: подумайте regex .
Вы можете создавать шаблоны регулярных выражений из ваших dicts и применять их - начиная с python 3.6i sh на нем будет применяется в порядке создания ключей в dict.
Ваши наборы символов в основном различны - но замена "g" by "r"
, а затем замена "r" by "p"
вызовет проблемы (см. quatrevingtdizaine
) - если вам не нужна такая «двойная» замена. Если нет, вам нужно исправить это самостоятельно (например, заменить g
на какой-то уникодесимвол, затем обработать r
, а затем заменить этот юникодесимол обратно на r
).
Применено:
three = {"ain":"(ен)", "oin":"(уен)"}
two = {"on":"(он)", "in":"(ин)", "en":"(ен)", "eu":"(ё)", "an":"(ен)",
"ou":"у", "oi":"уа", "au":"о", "ai":"э", "un":"(ен)", "ya":"я",
"gn":"нь", "qu":"к", "ch":"ш" }
one = {"a":"а", "b":"б", "c":"с", "ç":"с", "d":"д", "e":"", "é":"э",
"è":"э", "ê":"э", "e ":"е", "f":"ф", "g":"г", "h": "", "i":"и",
"j":"ж", "k":"к", "l":"л", "m":"м", "n":"н", "o":"о", "p":"п",
"r":"р", "s":"с", "t":"т", "u":"(ю)", "v":"в", "w":"", "x":"кс",
"y":"(и)", "z":"з" }
words = "quatrevingtdizaine l'info au plus près de chez vous".split()
import re
result = []
for word in words:
fr = word
print(fr, end = "")
for d in [three, two, one]: # dicts in order
for key, value in d.items(): # key,value pairs in order
fr1 = fr
fr = re.sub(key, value, fr) # substitute stuff
if fr1 != fr:
print(" ->", fr, end = "")
print()
result.append(fr)
print("", *result, sep="\n")
Выход:
"""
quatrevingtdizaine -> quatrevingtdiz(ен)e -> quatrev(ин)gtdiz(ен)e
-> кatrev(ин)gtdiz(ен)e -> каtrev(ин)gtdiz(ен)e -> каtrev(ин)gtдiz(ен)e
-> каtrv(ин)gtдiz(ен) -> каtrv(ин)гtдiz(ен) -> каtrv(ин)гtдиz(ен)
-> каtрv(ин)гtдиz(ен) -> катрv(ин)гтдиz(ен) -> катрв(ин)гтдиz(ен)
-> катрв(ин)гтдиз(ен)
l'info -> l'(ин)fo -> l'(ин)фo -> л'(ин)фo -> л'(ин)фо
au -> о
plus -> pлus -> плus -> плuс -> пл(ю)с
près -> prэs -> пrэs -> прэs -> прэс
de -> дe -> д
chez -> шez -> шz -> шз
vous -> vуs -> vус -> вус
катрв(ин)гтдиз(ен)
л'(ин)фо
о
пл(ю)с
прэс
д
шз
вус
"""