0

置換する文字列keysとその置換値を含む辞書があります。文字列をトークンごとに調べる以外に、置換を行うためのより良い/より高速な方法はありますか?

私はそのようにしてきました:

segmenter = {'foobar':'foo bar', 'withoutspace':'without space', 'barbar': 'bar bar'}

sentence = "this is a foobar in a barbar withoutspace"

for i in sentence.split():
  if i in segmenter:
    sentence.replace(i, segmenter[i])
4

2 に答える 2

5

Python では文字列は不変です。したがって、str.replace元の文字列を変更する代わりに、新しい文字列を返します。ここで内包表記を使用str.join()およびリストできます。

>>> segmenter = {'foobar':'foo bar', 'withoutspace':'without space', 'barbar': 'bar bar'}
>>> sentence = "this is a foobar in a barbar withoutspace"

>>> " ".join( [ segmenter.get(word,word) for word in sentence.split()] )
'this is a foo bar in a bar bar without space'

with のもう 1 つの問題は、withのstr.replaceような単語も置き換えてしまうことです。"abarbarb"

"abar barb".

于 2013-05-13T07:16:30.883 に答える
4

re.sub置換を返す関数を呼び出すことができます

segmenter = {'foobar':'foo bar', 'withoutspace':'without space', 'barbar': 'bar bar'}
sentence = "this is a foobar in a barbar withoutspace"

import re

def fn(match):
    return segmenter[match.group()]

print re.sub('|'.join(re.escape(k) for k in segmenter), fn, sentence)
于 2013-05-13T07:32:04.060 に答える