2015-09-14 1 views
2

Im пытается заменить одну часть моей строки, используя dict.Используйте dict для замены слова в строке

s = 'I am a string replaceme' 

d = { 
'replaceme': 'replace me' 
} 

Ive пробовал много вариаций, как

s = s.replace(d, d[other]) 

Это бросает ошибку быть имени ошибка: имя 'другие' не определен. Если у меня есть

s = s.replace('replaceme', 'replace me') 

Это работает. Как я могу достичь своей цели?

+0

'для frm, to_ в d.items(): s = s.replace (frm, to_)' (но обратите внимание, что у вас могут быть проблемы с порядком). Почему бы не использовать фактическое форматирование строк, например. с '%' или '{}'? – jonrsharpe

+0

Почему вы это делаете? –

+0

Я сделал программу, которая использует pyttsx для чтения текста. Я использую это, чтобы заставить abrivations сказать целые слова. Pyttsx не поддерживает это. Итак, я вырос на дому – shaggs

ответ

2

Вы должны заменить каждый KEY вашего dict с привязкой VALUE. Какое значение содержит переменную other? Является ли это действительным ключом ваших подстановок dict? Вы можете попробовать с помощью этого решения.

for k in d: 
    s = s.replace(k, d[k]) 

Каждый ключ в словаре этого значения следует заменить, используя соответствующее значение доступа с d[k].
Если словарь большой, приведенный пример покажет плохие результаты.

+0

'... in d' итерации только по клавишам, это будет' ValueError' – jonrsharpe

+0

Отредактировано =) спасибо –

+0

Получена ошибка * ошибка значения: слишком много значений для распаковки * – shaggs

0

Вы можете разделить строку и воссоединиться:

s = 'I am a string replaceme' 

d = { 
'replaceme': 'replace me' 
} 

print(" ".join([w if w not in d else d[w] for w in s.split(" ")])) 

Это не будет соответствовать подстрокам, где str.replace будет, если вы пытаетесь соответствовать подстроке итерации по dict.items и заменить ключ со значением:

d = { 
'replaceme': 'replace me' 
} 

for k,v in d.items(): 
    s = s.replace(k,v) 

print(s) 

I am a string replace me 
0

Вот другой подход: использование reduce:

s = 'I am a string replaceme' 
d = {'replaceme': 'replace me', 'string': 'phrase,'} 
s = reduce(lambda text, old_new_pair: text.replace(* old_new_pair), d.items(), s) 
# s is now 'I am a phrase, replace me' 
Смежные вопросы