python - 字符串编码器 - Python

标签 python string loops dictionary encoding

我一直在尝试使用字典对随机字符串集进行编码。我已经得到了代码来替换我想要的字母,但在某些情况下,当我真正只希望它替换字符串中的字母一次时,它会多次替换一个字符。这就是我所拥有的:

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/

相关文章:

java - 玩牌时遇到麻烦

javascript - 如何在 Node.js 中循环设置背景动画

python - 在我的 Python Battleship 游戏中创建一行数字/字母

python - python 中同时执行多个任务

c++ - 如何拆分整数数组中的输入字符串(C++)

java - 我正在编写一个程序来读取 mm/dd/yyyy 并陷入如何从字符串中提取 mm 并将其转换为 int 的问题

java - 需要在java中将一个字符串分成两部分

php - Codeigniter - 带循环的多输入

python pandas多索引数据框选择

python - 在 Mac OS X 上安装 Python Twisted