如何在Python中替换字符串中的字符?

2 投票
6 回答
3481 浏览
提问于 2025-04-17 07:37

我想找到一个最好的方法来做以下事情:

我有一个字符串,比如说:

str = "pkm adp"

我还有一个字典,里面有一些代码,用来替换每个字符,比如:

code =  {'a': 'c', 'd': 'a', 'p': 'r', 'k': 'e', 'm': 'd'}

('a' 应该被替换成 'c''d' 应该被替换成 'a' ...)

我该如何使用字典里的字符来转换第一个字符串,从而得到新的字符串呢?比如在这个例子中,我应该得到 "red car" 作为新的字符串。

6 个回答

6
>>> s = "pkm adp"
>>> code = {'a': 'c', 'd': 'a', 'p': 'r', 'k': 'e', 'm': 'd'}
>>> from string import maketrans
>>> s.translate(maketrans(''.join(code.keys()), ''.join(code.values())))
'red car'

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

8

试试这个:

>>> import string
>>> code = {'a': 'c', 'd': 'a', 'p': 'r', 'k': 'e', 'm': 'd'}
>>> trans = string.maketrans(*["".join(x) for x in zip(*code.items())])
>>> str = "pkm adp"
>>> str.translate(trans)
'red car'

解释:

>>> help(str.translate)
Help on built-in function translate:

translate(...)
    S.translate(table [,deletechars]) -> string

    Return a copy of the string S, where all characters occurring
    in the optional argument deletechars are removed, and the
    remaining characters have been mapped through the given
    translation table, which must be a string of length 256.

>>> help(string.maketrans)
Help on built-in function maketrans in module strop:

maketrans(...)
    maketrans(frm, to) -> string

    Return a translation table (a string of 256 bytes long)
    suitable for use in string.translate.  The strings frm and to
    must be of the same length.

maketrans 这一行把字典转换成两个独立的字符串,这样就可以输入到 maketrans 里了:

>>> code = {'a': 'c', 'd': 'a', 'p': 'r', 'k': 'e', 'm': 'd'}
>>> code.items()
[('a', 'c'), ('p', 'r'), ('k', 'e'), ('m', 'd'), ('d', 'a')]
>>> zip(*code.items())
[('a', 'p', 'k', 'm', 'd'), ('c', 'r', 'e', 'd', 'a')]
>>> ["".join(x) for x in zip(*code.items())]
['apkmd', 'creda']
6
"".join(code.get(k, k) for k in str)

在你的情况下,这个方法也能奏效。

code.get(k, k) 这个写法的意思是,如果 kcode 里一个有效的键,那么它会返回 code[k] 的值;如果 k 不是有效的键,它就会返回 k 本身。

撰写回答