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
raja
Updated on 30-Jul-2019 22:30:23

Advertisements