我需要一个翻译器,它有一个字典,键像'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)
正则表达式默认是贪婪的。如果您正在使用一个版本的Python字典中的键值的插入顺序保证,你插入键值对,这样的先来的时间越长,这样应该为你工作——re.sub
接受一个字符串来代替匹配,或者需要一个可调用(如函数/λ/等等),接受当前匹配作为参数,而且必须返回一个字符串来代替:
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+版本,则字典维护键的插入顺序。因此,你可以在迭代dict.items()
的同时使用str.replace()
来实现这一点。
它将基于映射递归地更新字符串. 例如,如果'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()
保持了插入顺序,因此首先定义的键将在迭代期间首先执行。因此,您可以通过定义您希望在其他键之前声明优先级的键来定义规则的优先级。