Самый простой способ заменить строку с помощью словаря замен?
рассмотреть..
dict = {
'Спорт':'Досуг',
'russianA':'englishA'
}
s = 'Спорт russianA'
Я хотел бы заменить все ключи dict с их соответствующими значениями dict в s
.
7 ответов:
используя 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()))
вы могли бы использовать уменьшить:
reduce(lambda x, y: x.replace(y, dict[y]), dict, s)
решение найти здесь (мне нравится своей простотой):
def multipleReplace(text, wordDict): for key in wordDict: text = text.replace(key, wordDict[key]) return text
в одну сторону, без re
d = { 'Спорт':'Досуг', 'russianA':'englishA' } s = 'Спорт russianA'.split() for n,i in enumerate(s): if i in d: s[n]=d[i] print ' '.join(s)
почти то же самое, что и ghostdog74, хотя и независимо созданный. Одно отличие, использование d. get () вместо d[] может обрабатывать элементы не в 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'