1

我有一本字典,所有键都长三个字母:threeLetterDict={'abc': 'foo', 'def': 'bar', 'ghi': 'ha' ...}

现在我需要将一个句子翻译abcdefghifoobarha. 我正在尝试以下方法re.sub,但不知道如何将字典放入其中:

p = re.compile('.{3}') # match every three letters
re.sub(p,'how to put dictionary here?', "abcdefghi")

谢谢!(无需检查输入长度是否为三的倍数)

4

3 回答 3

3

您可以将任何可调用对象传递给re.sub,因此:

p.sub(lambda m: threeLetterDict[m.group(0)], "abcdefghi")

有用!

于 2013-09-29T00:18:32.767 回答
3

完全避免的解决方案re

threeLetterDict={'abc': 'foo', 'def': 'bar', 'ghi': 'ha'}

threes = map("".join, zip(*[iter('abcdefghi')]*3))

"".join(threeLetterDict[three] for three in threes)
#>>> 'foobarha'
于 2013-09-29T00:27:17.350 回答
2

您可能不需要在这里使用 sub :

>>> p = re.compile('.{3}')
>>> ''.join([threeLetterDict.get(i, i) for i in p.findall('abcdefghi')])
'foobarha'

只是一个替代解决方案:)。

于 2013-09-29T00:22:08.973 回答