Reference Materials
Created with over a decade of experience.
Certification Courses
Created with over a decade of experience and thousands of feedback.
Python String Methods
- Python String capitalize()
- Python String center()
- Python String casefold()
- Python String count()
- Python String endswith()
- Python String expandtabs()
- Python String encode()
- Python String find()
- Python String format()
- Python String index()
- Python String isalnum()
- Python String isalpha()
- Python String isdecimal()
- Python String isdigit()
- Python String isidentifier()
- Python String islower()
- Python String isnumeric()
- Python String isprintable()
- Python String isspace()
- Python String istitle()
- Python String isupper()
- Python String join()
- Python String ljust()
- Python String rjust()
- Python String lower()
- Python String upper()
- Python String swapcase()
- Python String lstrip()
- Python String rstrip()
- Python String strip()
- Python String partition()
- Python String maketrans()
- Python String rpartition()
- Python String translate()
- Python String replace()
- Python String rfind()
- Python String rindex()
- Python String split()
- Python String rsplit()
- Python String splitlines()
- Python String startswith()
- Python String title()
- Python String zfill()
- Python String format_map()
Python String maketrans()
In simple terms, maketrans() method is a static method that creates a one to one mapping of a character to its translation/replacement.
It creates a Unicode representation of each character for translation.
This translation mapping is then used for replacing a character to its mapped character when used in translate() method.
The syntax of maketrans() method is:
string.maketrans(x[, y[, z]])
Here, y and z are optional arguments.
String maketrans() Parameters
maketrans() method takes 3 parameters:
- x - If only one argument is supplied, it must be a dictionary.
The dictionary should contain a 1-to-1 mapping from a single character string to its translation OR a Unicode number (97 for 'a') to its translation. - y - If two arguments are passed, it must be two strings with equal length.
Each character in the first string is a replacement to its corresponding index in the second string. - z - If three arguments are passed, each character in the third argument is mapped to None.
Return value from String maketrans()
The maketrans() method returns a translation table with a 1-to-1 mapping of a Unicode ordinal to its translation/replacement.
Example 1: Translation table using a dictionary with maketrans()
# example dictionary
dict = {"a": "123", "b": "456", "c": "789"}
string = "abc"
print(string.maketrans(dict))
# example dictionary
dict = {97: "123", 98: "456", 99: "789"}
string = "abc"
print(string.maketrans(dict))
Output
{97: '123', 98: '456', 99: '789'}
{97: '123', 98: '456', 99: '789'}
Here, a dictionary dict is defined. It contains a mapping of characters a,b and c to 123, 456, and 789 respectively.
maketrans() creates a mapping of the character's Unicode ordinal to its corresponding translation.
So, 97 ('a') is mapped to '123', 98 'b' to 456 and 99 'c' to 789. This can be demonstrated from the output of both dictionaries.
Also, if two or more characters are mapped in the dictionary, it raises an exception.
Example 2: Translation table using two strings with maketrans()
# first string
firstString = "abc"
secondString = "def"
string = "abc"
print(string.maketrans(firstString, secondString))
# example dictionary
firstString = "abc"
secondString = "defghi"
string = "abc"
print(string.maketrans(firstString, secondString))
Output
{97: 100, 98: 101, 99: 102}
ValueError: the first two maketrans arguments must have equal length
Here first, two strings of equal length abc and def are defined. And the corresponding translation is created.
Printing only the first translation gives you a 1-to-1 mapping to each character's Unicode ordinal in firstString to the same indexed character on secondString.
In this case, 97 ('a') is mapped to 100 ('d'), 98 ('b') to 101 ('e') and 99 ('c') to 102 ('f').
Trying to create a translation table for unequal length strings raises a ValueError exception indicating that the strings must have equal length.
Example 3: Translational table with removable string with maketrans()
# first string
firstString = "abc"
secondString = "def"
thirdString = "abd"
string = "abc"
print(string.maketrans(firstString, secondString, thirdString))
Output
{97: None, 98: None, 99: 102, 100: None}
Here, first, the mapping between the two strings firstString and secondString are created.
Then, the third argument thirdString resets the mapping of each character in it to None and also creates a new mapping for non-existent characters.
In this case, thirdString resets the mapping of 97 ('a') and 98 ('b') to None, and also creates a new mapping for 100 ('d') mapped to None.
Also Read:
