如何在Python中替换字符串中的字符?
我想找到一个最好的方法来做以下事情:
我有一个字符串,比如说:
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)
这个写法的意思是,如果 k
是 code
里一个有效的键,那么它会返回 code[k]
的值;如果 k
不是有效的键,它就会返回 k
本身。