Как генерировать такую ссылку?

На многих сайтах ссылки на посты выглядят примерно так "rabota-so-staticheskimi-fajlami-vo-flask" или "lunnoe-puteshestvie-privedet-k-novomu-miru" вопрос заключается в том как генерировать такую ссылку?


Ответы (2 шт):

Автор решения: Andy Pavlov

Обычной заменой по словарю можно обойтись:

TRANSLIT = {'а':'a','б':'b','в':'v','г':'g','д':'d','е':'e','ё':'yo',
      'ж':'zh','з':'z','и':'i','й':'i','к':'k','л':'l','м':'m','н':'n',
      'о':'o','п':'p','р':'r','с':'s','т':'t','у':'u','ф':'f','х':'h',
      'ц':'c','ч':'ch','ш':'sh','щ':'sch','ъ':'','ы':'y','ь':'','э':'e',
      'ю':'u','я':'ya', 'А':'A','Б':'B','В':'V','Г':'G','Д':'D','Е':'E','Ё':'YO',
      'Ж':'ZH','З':'Z','И':'I','Й':'I','К':'K','Л':'L','М':'M','Н':'N',
      'О':'O','П':'P','Р':'R','С':'S','Т':'T','У':'U','Ф':'F','Х':'H',
      'Ц':'C','Ч':'CH','Ш':'SH','Щ':'SCH','Ъ':'','Ы':'y','Ь':'','Э':'E',
      'Ю':'U','Я':'YA',' ': '-'}


def translit(text: str, lower=True):
    text = text.lower() if lower else text
    return ''.join([TRANSLIT[s] if s in TRANSLIT else s for s in text])


print(translit('История одного дома'))
print(translit('Он сказал Astalavista'))

Второй вариант через встроенную функцию translate(), которая переводит, и maketrans(), которая строит таблицу перевода по словарю.

def translit(text: str, lower=True):
    text_table = text.maketrans(TRANSLIT)
    return text.translate(text_table).lower() if lower else text.translate(text_table)

Вывод:

istoriya-odnogo-doma
on-skazal-astalavista
→ Ссылка
Автор решения: strawdog

Вот вам в копилку ради академического интереса:

text = "Привет участникам соревнований!"
res = ''.join([chr(x&0x7F) for x in text.encode("koi8-r")]).swapcase().replace(" ","-")

res:

Priwet-u^astnikam-sorewnowanij!
→ Ссылка