字符串使用dict翻译

时间:2016-04-07 20:46:53

标签: python string

我想使用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创建的字典?那么,如果我想将translatetrans一起使用,我需要更改哪些内容?

3 个答案:

答案 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'