用字典python中的值替换string中的多个字符

时间:2016-08-19 22:34:02

标签: python dictionary

我正在尝试创建一个遍历字符串的函数,找到与字典中的键匹配的字符,并将该字符替换为该键的字典中的值。但是它目前只替换字典中第一次出现的字母并停在那里,我哪里出错?

===

4 个答案:

答案 0 :(得分:1)

你的return语句在if语句中,所以如果一个字符匹配,你的函数将替换该单个字符,然后返回。

如果你想要替换所有的字符,让它通过在for循环之外移动你的return语句来遍历字符串的所有字符。

def cypher(string):
    result = string
    for i in string:
        if i in d:
            result = result.replace(i,d[i])
    return result

答案 1 :(得分:0)

您在for循环中调用return过早地结束了代码。您可以通过将新字符串存储在循环外部来修复它,只有在循环完成后才返回:

def cypher(string):
    a = string  # a new string to store the replaced string
    for i in string:
        if i in d:
            a = a.replace(i, d[i])
    return a

但逻辑也有问题。如果字典中的值也是字典中的键,则键可能会被替换两次。例如,如果您有d = {'I': 'i', 'i': 'a'},输入为Ii,则输出为aa

这是一个使用join的更简洁的实现,没有这个问题。

def cypher(string):
    return ''.join(d.get(l, l) for l in string)

答案 2 :(得分:0)

正如zachyee指出的那样,你的return语句在循环中。

您可能需要查看str.translate,它完全符合您的要求:

def cypher(string):
    return string.translate(str.maketrans(d))

请注意使用str.maketrans可以在string.translate可以使用的内容中转换您的字典。但是,此方法仅限于单个字符的映射。

答案 3 :(得分:0)

一个衬垫 - > print ''.join(d[c] if c in d else c for c in s)

示例输出:

>>> s = 'Hello World' 
>>> d = {
'I':'1', 'R':'2', 'E':'3', 'A':'4', 'S':'5', 'G':'6', 'T':'7', 'B':'8', 'O':'0',
'l':'1', 'z':'2', 'e':'3', 'a':'4', 's':'5', 'b':'6', 't':'7', 'g':'9', 'o':'0',
}
>>> print ''.join(d[c] if c in d else c for c in s)
H3110 W0r1d