# Python maketrans() and translate() functions

PythonProgrammingServer Side Programming

## Python String maketrans()

The maketrans() method returns a mapping table for translation usable for translate() method. This is a static method that creates a one to one mapping of a character to its translation/replacement. This method creates a Unicode representation of each character for translation.

The syntax of maketrans() method is −

string.maketrans(x[, y[, z]])
y and z are optional arguments.


## String maketrans() Parameters

The maketrans() method has 3 parameters.

x - In this case if only one argument is supplied, it must be a dictionary and the dictionary should contain 1-to-1 mapping from a single character string to its translation OR a Unicode number (97 for 'a') to its translation.

y - In this case if two arguments are passed, it must be two strings with equal length and each character in the first string is a replacement to its corresponding index in the second string.

z - In this case if three arguments are passed, each character in the third argument is mapped to none.

## Return value from String maketrans()

This method returns a translation table with a 1-to-1 mapping of a Unicode ordinal to its translation/replacement.

## Example1

Translation table using a dictionary with maketrans()

## Example code

dict= {"a": "123", "b": "456", "c": "789"}
my_string = "abc"
print(my_string.maketrans(dict))
# example dictionary
dict = {97: "123", 98: "456", 99: "789"}
my_string = "abc"
print(my_string.maketrans(dict))


## Output

{97: '123', 98: '456', 99: '789'}
{97: '123', 98: '456', 99: '789'}


Explanation − In this example, dict is a dictionary and It contains a mapping of characters a,b and c to 123, 456 and 789 respectively. The maketrans() creates a mapping of the character's Unicode ordinal to its corresponding translation. So, the result is 97 ('a') is mapped to '123', 98 'b' to 456 and 99 'c' to 789.

## Example2

Translation table using two strings with maketrans()

## Example

my_string1 = "abc"
my_string2 = "def"
string = "abc"
print(string.maketrans(my_string1, my_string2))
# Example dictionary
my_string1 = "abc"
my_string2 = "defghi"
string = "abc"
print(string.maketrans(my_string1, my_string2))


## Output

{97: 100, 98: 101, 99: 102}
ValueError: the first two maketrans arguments must have equal length


Explanation − In this example two strings of equal length "abc" and "def" are defined. And the corresponding translation is created and printing only the first translation gives you a 1-to-1 mapping to each character's Unicode ordinal in my_string1 to the same indexed character on the my_string2.

But in this case, 97 ('a') is mapped to 100 ('d'), 98 ('b') to 101 ('e') and 99 ('c') to 102 ('f') and trying to create a translation table for unequal length strings raises a ValueError exception indicating that the strings must have equal length.

translate(). We know that a translation table maps characters to other characters. We use the translate() method in Python for making many character replacements in strings. First we build a translation dictionary with maketrans() and pass this to translate.

## Python program that uses maketrans, translate

#Python program that uses maketrans, translate
dict = str.maketrans("abc", "def")
print(dict)
# Translate this value.
value = "aabbcc"
result = value.translate(dict)
print(result)


## Output

{97: 100, 98: 101, 99: 102}
ddeeff


## Python program that ignores, removes characters

# Create translation table.
table = str.maketrans("78", "12", "9")
# Translate this string.
input = "123456789"
result = input.translate(table)
# Write results.
print(input)
print(result)


## Output

123456789
12345612


## Python program that applies rot13 translation

#Create translation table.
trans = str.maketrans("abcdefghijklmnopqrstuvwxyz","nopqrstuvwxyzabcdefghijklm")
# Apply rot13 translation.
print("gandalf".translate(trans))
print("gandalf".translate(trans).translate(trans))


## Output

tnaqnys
gandalf

Updated on 30-Jul-2019 22:30:23