用字典中冲突的键替换字符串中的符号

2024-10-02 02:24:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个翻译,那有一本字典,上面有 's': 'd''sch': 'b' . 这是一个粗略的例子,但重点是,当我有一个像"schto"这样的输入词时,它需要将其替换为"bkr",将'sch'替换为'b'。但是有一个键's',因此它将单词翻译为"dnokr",省略并永远不要查找'sch',因为这里有一个带有符号's'的键,它首先在'sch'之前翻译它。首先用'sch'键替换输入字,而不是用单独的“s”、“c”和“h”替换输入字,这里有什么解决方法

下面是代码的示例

newdict = {'sch': 'b', 'sh': 'q', 'ch': 'w', 's': 'd', 'c': 'n', 'h': 'o', 't': 'k', 'o': 'r'}

code = input("Type: ")
code = "".join([newdict[w] for w in code])
print(code)

Tags: 方法代码重点字典符号code单词例子
2条回答

默认情况下,正则表达式是贪婪的。如果您使用的Python版本保证了键值对在字典中的插入顺序,并且插入键值对的方式是先插入较长的键值对,那么类似的方法应该适用于您-re.sub要么使用字符串替换匹配项,要么使用可调用的字符串(function/lambda/where),它接受当前匹配项作为参数,并且必须返回一个字符串以替换它:

import re

lookup = {
    "sch": "b",
    "sh": "q",
    "s": "d"
}

def replace(match):
    return lookup[match.group()]

pattern = "|".join(lookup)

print(re.sub(pattern, replace, "schush swim"))

输出:

buq dwim
>>> 

如果您使用的是Python版本3.4+,那么字典将维护键的插入顺序。因此,您可以使用str.replace()dict.items()上进行迭代来实现这一点

它将基于映射递归地更新字符串。例如,如果'h''o'替换,那么'o'将被'r'替换

newdict = {'sch': 'b', 'sh': 'q', 'ch': 'w', 's': 'd', 'c': 'n', 'h': 'o', 't': 'k', 'o': 'r'}
my_word = "schto"

for k, v in newdict.items():
    my_word = my_word.replace(k, v)

其中my_word将为您提供所需的字符串'bkr'

这里,由于dict.items()保持插入顺序,因此在迭代期间将首先执行首先定义的。因此,您可以通过在其他键之前声明要赋予优先级的键来定义规则的优先级

相关问题 更多 >

    热门问题