2025, Sep 16 20:01

str.maketrans и str.translate в Python: почему коды и как получить «символ → символ»

Разбираем, почему str.maketrans в Python возвращает числовые коды и как собрать таблицу символ → символ. Показываем примеры со str.translate и готовые решения.

Почему str.maketrans возвращает числовые коды и как составить таблицу «символ → символ»

Когда вы строите таблицу преобразования в Python из двух строк, результат может удивить. Вместо наглядного соответствия «символ к символу» вы видите словарь с числами. Возникает простой вопрос: почему так устроено и как получить таблицу на уровне символов, если нужна именно она?

Пример

source_seq = 'abcd'
target_seq = 'dcba'
map_table = str.maketrans(source_seq, target_seq)
print(map_table)

Что происходит и почему

Так задумано. Этот API создан для работы со str.translate, и возвращаемая таблица хранит соответствия как числовые коды символов. Именно такой формат ожидает translate, поэтому вы видите числа вместо самих символов.

Как получить отображение по символам

Если вам нужен человекочитаемый словарь или пара «символ → символ», собранная из переменных, можно вернуть числовые ключи и значения к символам. Один вариант — преобразовать обе стороны в символы. Другой — построить словарь напрямую из исходной и целевой строк.

# Преобразовать числовые коды обратно в символы
char_map = {chr(k): chr(v) for k, v in map_table.items()}
print(char_map)
# Или собрать соответствия прямо из исходных строк
pair_map = dict(zip(source_seq, target_seq))
print(pair_map)

Оба подхода дают один и тот же результат на уровне символов: {'a': 'd', 'b': 'c', 'c': 'b', 'd': 'a'}.

Почему это важно

Понимание того, что таблица предназначена для str.translate, объясняет числовое представление и снимает вопросы при её изучении. Когда требуется вид на уровне символов — например, для отображения, логирования или построения из переменных, — можно конвертировать числовые записи обратно в символы или собрать словарь напрямую из исходных строк.

Выводы

str.maketrans возвращает структуру, согласованную со str.translate, поэтому в ней используются числовые коды. Если нужен словарь «символ → символ», полученный из переменных, либо преобразуйте ключи и значения таблицы в символы, либо создайте соответствия прямо из входных строк с помощью dict(zip(...)). Обе формы представления удобны: одна — для работы API, другая — для наглядного вывода.

Материал основан на вопросе на StackOverflow от Will Ronson и ответе Julien.