我一直在尝试使用字典对随机字符串集进行编码。我已经得到了代码来替换我想要的字母,但在某些情况下,当我真正只希望它替换字符串中的字母一次时,它会多次替换一个字符。这就是我所拥有的:
def encode(msg,code):
for i in msg:
for i in code:
msg = msg.replace(i, code[i])
return msg
出于测试目的,我使用了函数调用: 初始:
encode("blagh", {"a":"e","h":"r"})
和一个更复杂的字符串:
encode("once upon a time",{'a':'ae','e':'ei','i':'io','o':'ou','u':'ua'})
对于上面的第二个,我正在寻找以下输出: 'ouncei uapoun ae tiomei'
但我发现自己:
“ounceio uapoun aeio tiomeio”
如何将循环限制为仅替换每个字符一次?
最佳答案
Python 3 str.translate
函数做你想要的。请注意,翻译字典必须使用 Unicode 序数作为键,因此该函数使用字典理解将其转换为正确的格式:
def encode(msg,code):
code = {ord(k):v for k,v in code.items()}
return msg.translate(code)
print(encode("blagh", {"a":"e","h":"r"}))
print(encode("once upon a time",{'a':'ae','e':'ei','i':'io','o':'ou','u':'ua'}))
输出:
blegr
ouncei uapoun ae tiomei
如果您使用 Unicode 字符串或将以下内容添加到文件顶部以使字符串默认为 Unicode,它也适用于 Python 2:
from __future__ import unicode_literals
关于python - 字符串编码器 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36393643/