将替换字符串替换为键并将替换字符串替换为值。蟒蛇

问题描述:

我有一个字典字符串被替换为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]) 
+1

我问[同样的问题(http://*.com/q/10931150/989121)前一阵子的功能。有一些很好的答案。 – georg 2013-05-13 10:00:51

字符串在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' 

str.replace的另一个问题是,它也将与

"abar barb"更换的话就像"abarbarb"

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) 
+1

+1这比split/get/join方法更具惯用和可控性。 One nit:在构建这样的组合正则表达式时,一定要按键长进行降序排序,以便像“without”这样的较长键不会被像“with”这样的较短键所掩盖。或者,使用“\ b”来定位字边界并防止键之间的混叠。 – 2013-05-13 08:13:49