Phương thức maketrans() tạo bảng ánh xạ ký tự dùng cho translate() để thay thế hàng loạt ký tự trong chuỗi.
Cú pháp maketrans()
string.maketrans(x[, y[, z]])
- x (1 đối số): dictionary ánh xạ 1-1 từ ký tự/Unicode sang giá trị thay thế.
- x, y (2 đối số): hai chuỗi cùng độ dài, ký tự ở vị trí i trong x được thay bằng ký tự vị trí i trong y.
- x, y, z (3 đối số): ký tự trong z được ánh xạ thành None (xóa bỏ).
Ví dụ 1: Dictionary
dict = {"a": "123", "b": "456", "c": "789"}
my_string = "abc"
print(my_string.maketrans(dict))
# Kết quả: {97: '123', 98: '456', 99: '789'} (97,98,99 là Unicode của a,b,c)
Ví dụ 2: Hai chuỗi
my_string1 = "abc"
my_string2 = "def"
string = "abc"
print(string.maketrans(my_string1, my_string2))
# Kết quả: {97: 100, 98: 101, 99: 102} (a→d, b→e, c→f)
# Lỗi nếu độ dài khác nhau:
my_string1 = "abc"
my_string2 = "defghi"
print(string.maketrans(my_string1, my_string2))
# ValueError: the first two maketrans arguments must have equal length
Hàm translate()
Áp dụng bảng ánh xạ từ maketrans() để thay thế ký tự.
# Thay thế cơ bản
dict = str.maketrans("abc", "def")
value = "aabbcc"
print(value.translate(dict)) # ddeeff
# Xóa ký tự (tham số thứ 3)
table = str.maketrans("78", "12", "9")
input_str = "123456789"
print(input_str.translate(table)) # 12345612 (7→1, 8→2, 9 bị xóa)
# ROT13 cipher
trans = str.maketrans(
"abcdefghijklmnopqrstuvwxyz",
"nopqrstuvwxyzabcdefghijklm"
)
print("gandalf".translate(trans)) # tnaqnys
print("gandalf".translate(trans).translate(trans)) # gandalf (giải mã)
Ứng dụng thực tế
- Làm sạch dữ liệu văn bản (xóa ký tự đặc biệt).
- Mã hóa/giải mã đơn giản (ROT13, Caesar cipher).
- Chuẩn hóa ký tự Unicode.