用replace字典replacestring的最简单的方法是什么?

考虑..

dict = { 'Спорт':'Досуг', 'russianA':'englishA' } s = 'Спорт russianA' 

我想用s各自的dict值replace所有的dict键。

使用re:

 import re s = 'Спорт not russianA' d = { 'Спорт':'Досуг', 'russianA':'englishA' } pattern = re.compile(r'\b(' + '|'.join(d.keys()) + r')\b') result = pattern.sub(lambda x: d[x.group()], s) # Output: 'Досуг not englishA' 

这只会匹配整个单词。 如果你不需要,使用模式:

 pattern = re.compile('|'.join(d.keys())) 

请注意,在这种情况下,如果某些字典条目是其他string的子string,则应按字母顺序sorting。

你可以使用reduce函数:

 reduce(lambda x, y: x.replace(y, dict[y]), dict, s) 

在这里find解决scheme(我喜欢它的简单性):

 def multipleReplace(text, wordDict): for key in wordDict: text = text.replace(key, wordDict[key]) return text 

一种方式,没有重新

 d = { 'Спорт':'Досуг', 'russianA':'englishA' } s = 'Спорт russianA'.split() for n,i in enumerate(s): if i in d: s[n]=d[i] print ' '.join(s) 

几乎和ghostdog74一样,虽然是独立创build的。 一个区别是,使用d.get()而不是d []可以处理不在字典中的项目。

 >>> d = {'a':'b', 'c':'d'} >>> s = "acx" >>> foo = s.split() >>> ret = [] >>> for item in foo: ... ret.append(d.get(item,item)) # Try to get from dict, otherwise keep value ... >>> " ".join(ret) 'bdx' 

我在类似的情况下使用这个(我的string都是大写的):

 def translate(string, wdict): for key in wdict: string = string.replace(key, wdict[key].lower()) return string.upper() 

希望能以某种方式帮助… 🙂