我想使用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)
所需的输出为"cdacda"
我得到的是
cdacda
abcabc
现在out1
是所需的输出,但out
不是。我无法弄清楚为什么会这样。如何在dict
函数中使用通过translate
创建的字典?那么,如果我想将translate
与trans
一起使用,我需要更改哪些内容?
答案 0 :(得分:1)
我不认为方法translate
会接受字典对象。另外,你应该看看你在创造什么:
>>> dict(zip("abc","cda"))
{'c': 'a', 'a': 'c', 'b': 'd'}
我认为这不是你想要的。 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)
使用dict
函数创建字典。阅读function definition。
>>> dict([("abc","cda")])
{"abc":"cda"}
答案 1 :(得分:0)
string.translate
不支持字典作为参数:
translate(s, table, deletions='')
translate(s,table [,deletions]) -> string
Return a copy of the string s, where all characters occurring
in the optional argument deletions are removed, and the
remaining characters have been mapped through the given
translation table, which must be a string of length 256. The
deletions argument is not allowed for Unicode strings.
所以,你必须编写自己的函数。
另外,修改你的代码,因为它不会在我知道的任何python版本中运行。它至少有2个例外。
答案 2 :(得分:0)
str.translate
很好地支持字典(实际上,它支持任何支持索引的内容,即__getitem__
)–只是键必须是 ordinal 表示角色,而不是角色本身。
比较:
>>> "abc".translate({"a": "d"})
'abc'
>>> "abc".translate({ord("a"): "d"})
'dbc'