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

use*_*563 2 python

我正在尝试找到执行以下操作的最佳方法:

我有一个字符串让我们说:

str = "pkm adp"
Run Code Online (Sandbox Code Playgroud)

我在字典中有一些代码来替换每个字符,例如:

code =  {'a': 'c', 'd': 'a', 'p': 'r', 'k': 'e', 'm': 'd'}
Run Code Online (Sandbox Code Playgroud)

('a'应改为'c','d''a'...)

如何使用字典中的必需字符转换第一个字符串以获取新字符串?这里例如我应该得到"red car"新的字符串.

Cla*_*diu 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'
Run Code Online (Sandbox Code Playgroud)

说明:

>>> 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.
Run Code Online (Sandbox Code Playgroud)

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']
Run Code Online (Sandbox Code Playgroud)


小智 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'
Run Code Online (Sandbox Code Playgroud)


Tim*_*ker 6

"".join(code.get(k, k) for k in str)
Run Code Online (Sandbox Code Playgroud)

也适用于你的情况.

code.get(k, k)返回code[k]if k是否为有效键code; 如果不是,它会k自行返回.