Рассмотрим..
dict = {
'Спорт':'Досуг',
'russianA':'englishA'
}
s = 'Спорт russianA'
Я хотел бы заменить все ключи dict на соответствующие значения dict в s
.
Рассмотрим..
dict = {
'Спорт':'Досуг',
'russianA':'englishA'
}
s = 'Спорт russianA'
Я хотел бы заменить все ключи dict на соответствующие значения dict в s
.
Используя 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:
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'
Я использовал это в аналогичной ситуации (моя строка была в верхнем регистре):
def translate(string, wdict):
for key in wdict:
string = string.replace(key, wdict[key].lower())
return string.upper()
надеюсь, что это поможет в некотором роде...:)
С предупреждением о том, что он сбой, если у ключа есть пробел, это сжатое решение, подобное ghostdog74 и extaneons:
d = {
'Спорт':'Досуг',
'russianA':'englishA'
}
s = 'Спорт russianA'
' '.join(d.get(i,i) for i in s.split())