我想用其他字母替换字符向量中的字母,使用用创建的字典dict,如下
import string
trans1 = str.maketrans("abc","cda")
trans = dict(zip("abc","cda"))
out1 = "abcabc".translate(trans1)
out = "abcabc".translate(trans)
print(out1)
print(out)
Run Code Online (Sandbox Code Playgroud)
所需的输出是 "cdacda"
我得到的是
cdacda
abcabc
Run Code Online (Sandbox Code Playgroud)
现在out1是这个期望的输出,但out不是。我不明白为什么会这样。如何使用通过创建字典dict的translate功能?那么如果我想使用translatewith ,我必须改变trans什么?
str.translate非常好地支持 dicts(实际上,它支持任何支持索引的东西,即__getitem__)——只是键必须是字符的序数表示,而不是字符本身。
相比:
>>> "abc".translate({"a": "d"})
'abc'
>>> "abc".translate({ord("a"): "d"})
'dbc'
Run Code Online (Sandbox Code Playgroud)
我认为该方法不会translate接受字典对象。此外,您应该看看您正在创建的内容:
>>> dict(zip("abc","cda"))
{'c': 'a', 'a': 'c', 'b': 'd'}
Run Code Online (Sandbox Code Playgroud)
我认为这不是你想要的。zip将第一个和第二个参数中相应的索引元素配对。
你可以写一个解决方法:
def translate_from_dict(original_text,dictionary_of_translations):
out = original_text
for target in dictionary_of_translations:
trans = str.maketrans(target,dictionary_of_translations[target])
out = out.translate(trans)
return out
trans = {"abc":"cda"}
out = translate_from_dict("abcabc",trans)
print(out)
Run Code Online (Sandbox Code Playgroud)
使用该dict函数创建字典。阅读函数定义。
>>> dict([("abc","cda")])
{"abc":"cda"}
Run Code Online (Sandbox Code Playgroud)