【问题标题】:Replace characters in string from dictionary mapping从字典映射中替换字符串中的字符
【发布时间】:2012-04-26 16:43:46
【问题描述】:

我对 python 还很陌生,如果我遗漏了一个明显的内置函数,请原谅我。

我生成了一个字典映射,如下所示:

dictionary = dict(zip(restAlphaSet,list(item)))

其中 restAlpha 将其设置为字符串,而 list(item) 是列表转换的迭代

我正在尝试使用它来替换字符串中的所有字符。我在网上找到了一个replaceAll函数,如下所示:

def replace_all(text, dic):
for i, j in dic.iteritems():
    if i != j:
        text = text.replace(i, j)
return text

不幸的是,这是有缺陷的,好像映射有 a->b,b->a,然后什么都不会改变,因为 b 会变回 a。

我找到了翻译功能,但它不接受字典输入。

【问题讨论】:

  • 删除b -> a 映射怎么样?
  • 您的示例函数中存在语法错误。 If i!=j 末尾需要冒号,否则会产生 SyntaxError。
  • 首先它将失败,IndentationError :)
  • 它与密码非常相似。所以字母可以映射到任何其他字母(没有重复),我只需要一个与订单无关的函数。而且你我抄错了,我会加冒号
  • translate 确实接受 dicts 如果应用于 unicode 对象(请参阅docs.python.org/library/stdtypes.html#str.translate

标签: python string dictionary replace


【解决方案1】:

我意识到这是一个老问题,但似乎没有使用字典对 a->bb->a 进行映射的答案。

我需要一个类似的函数,而完成这项工作的技巧是首先遍历我们需要替换的字符串,然后为每个字符查找映射。

def replace_all(text, dic):
    new_text = ""
    for char in text:
        for i, j in dic.iteritems():
            if char == i:
                new_text += j
return new_text

【讨论】:

    【解决方案2】:

    翻译速度更快。

    >>> import string
    >>> text.translate(string.maketrans("".join(restAlphaSet),"".join(item)))
    

    【讨论】:

    • 看来翻译功能和以前有同样的问题,就是把字符改回原来的样子。
    • @NickG mm.. 一定是你的代码有问题,贴出来让我们找出问题所在。
    • Py 3.x?,当然是 3.9+:str.maketrans(无需导入)。
    【解决方案3】:

    您忽略了translate 函数。使用示例见here

    【讨论】:

    • str.maketrans(不要导入:字符串)
    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 2018-09-11
    • 2013-11-18
    • 2021-04-21
    • 2016-09-19
    • 2017-06-03
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多