Consider..
dict = {
'Спорт':'Досуг',
'russianA':'englishA'
}
s = 'Спорт russianA'
I'd like to replace all dict keys with their respective dict values in s
.
Using 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'
This will match whole words only. If you don't need that, use the pattern:
pattern = re.compile('|'.join(d.keys()))
Note that in this case you should sort the words descending by length if some of your dictionary entries are substrings of others.
Solution found here (I like its simplicity):
def multipleReplace(text, wordDict):
for key in wordDict:
text = text.replace(key, wordDict[key])
return text
Almost the same as ghostdog74, though independently created. One difference, using d.get() in stead of d[] can handle items not in the dict.
>>> d = {'a':'b', 'c':'d'}
>>> s = "a c x"
>>> foo = s.split()
>>> ret = []
>>> for item in foo:
... ret.append(d.get(item,item)) # Try to get from dict, otherwise keep value
...
>>> " ".join(ret)
'b d x'
{'cat': 'russiancat'}
and "caterpillar"). Also overlapping words ({'car':'russiancar', 'pet' : 'russianpet'}
and 'carpet'). - Joedict
is best avoided as a variable name, because a variable of this name would shadow the built-in function of the same name. - jochen