使用 dict 进行字符串翻译

use*_*755 4 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)
Run Code Online (Sandbox Code Playgroud)

所需的输出是 "cdacda"

我得到的是

cdacda
abcabc
Run Code Online (Sandbox Code Playgroud)

现在out1是这个期望的输出,但out不是。我不明白为什么会这样。如何使用通过创建字典dicttranslate功能?那么如果我想使用translatewith ,我必须改变trans什么?

Jos*_*osh 9

str.translate非常好地支持 dicts(实际上,它支持任何支持索引的东西,即__getitem__)——只是键必须是字符的序数表示,而不是字符本身。

相比:

>>> "abc".translate({"a": "d"})
'abc'
>>> "abc".translate({ord("a"): "d"})
'dbc'
Run Code Online (Sandbox Code Playgroud)


Far*_*Joe 2

我认为该方法不会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)