【发布时间】:2016-10-05 06:54:37
【问题描述】:
好的,所以我得到了这个特殊的任务:)
假设我们有一个string 的字符(一个单词),它需要被翻译成另一个字符串。
使用string.maketrans 和string.translate 以最简单的形式解决此云。
但是,在我的例子中,第一个字符串中的两个字符的组合应该被翻译成另一个组合或一个单个字符结果字符串,单个字符可以翻译成两个字符的组合,最后单个字符可以翻译成单个字符,例如
ai -> should become e
oi -> should become i
另一方面
8 -> should become th
但是
w should become o
y should become u
其他字符可能保持不变,例如
a should remain a
o should remain o
所以对于下面的输入
aiakotoiwpy
预期的输出将是
eakotiopu
我正在考虑的一种方法是使用哈希表(用于翻译)并逐个字符读取输入sting 并执行替换。我想知道是否有任何“更聪明”的方法?
我们将不胜感激任何有价值的意见!
谢谢。
编辑
试过这个(按照建议):
d = {
'ai': 'e',
'ei': 'i',
'oi': 'i',
'o' : 'o',
'a' : 'a',
'w' : 'o',
'y' : 'u'
}
s ="aiakotoiwpy"
pattern = re.compile('|'.join(d.keys()))
result = pattern.sub(lambda x: d[x.group()], s)
但结果是
aiakotiopu
不是预期的……
【问题讨论】:
-
@WiktorStribiżew 尝试了这种方法 - 它不起作用它返回
aiakotiopuford = { 'ai': 'e', 'ei': 'i', 'oi': 'i', 'o' : 'o', 'a' : 'a', 'w' : 'o', 'y' : 'u' } -
是因为
join不守序。 -
@WiktorStribiżew 嗯......那么你有什么建议?有办法解决吗?
-
使用
OrderedDict,见this demo -
查看我建议的链接:请注意,在这种情况下,如果您的某些字典条目是其他字典条目的子字符串,则应按长度降序对单词进行排序。 所以,问题对我来说仍然是重复的。