#python-3.x #string #dictionary
#python-3.x #строка #словарь
Вопрос:
У меня также есть словарь и строка, я хочу заменить подстроку значением словаря. Я использую следующий код, но не получаю ожидаемого результата.
dict1 = {'name1': 'Orange', 'name2': 'Apple', 'name3': 'Carrot', 'name4': 'Mango'}
a ="Fruit: name1 Fruit: name2 Fruit: name5 Fruit: name3 Fruit: name5"
print(a)
a_new = ''
for key in dict1.keys():
skey = a[a.find(': ') 2 : a.find(' F')].strip()
if skey == key:
sval = dict1[key]
a_new = a[ : a.find(': ') 1] sval a[a.find(' F') : ]
print(a_new)
Вывод моего кода
Fruit: name1 Fruit: name2 Fruit: name5 Fruit: name4 Fruit: name5
Fruit:Orange Fruit: name2 Fruit: name5 Fruit: name4 Fruit: name5
Мой ожидаемый результат
Fruit: name1 Fruit: name2 Fruit: name5 Fruit: name4 Fruit: name5
Fruit: Orange Fruit: Apple Fruit: name5 Fruit: Carrot Fruit: Mango
Я ценю вашу помощь. Заранее спасибо.
Комментарии:
1. Вы хотите сопоставить подстроки с последовательными ключами от первого до последнего или хотите проверить, совпадает ли оно с какими-либо ключами?
2. Я просто хочу проверить, совпадает ли подстрока с ключами словаря или нет.
Ответ №1:
Ну, вы были очень близки к ожидаемому результату. Я где-то отредактировал ваши коды и получил ожидаемый результат, хотя вы также можете сделать это с помощью регулярного выражения. find
возвращает совпадения первого вхождения с подстрокой, в вашем случае вам нужно сместить find
позицию поиска.
find(substring, start_position, end_position)
Измененный код
dict1 = {'name1': 'Orange', 'name2': 'Apple', 'name3': 'Carrot', 'name4': 'Mango'}
a ="Fruit: name1 Fruit: name2 Fruit: name5 Fruit: name3 Fruit: name5"
offset1 = 0
offset2 = 0
print(a)
for key in dict1.keys():
skey = a[a.find(': ', offset1) 2 : a.find(' F', offset2)].strip()
if skey in dict1.keys():
sval = dict1[key]
a = a[ : a.find(': ', offset1) 2] sval 't' a[a.find(' F', offset2) : ]
offset1 = a.find(': ', offset1) 1
offset2 = a.find(" F", offset2) 1
print(a)
Вывод
Fruit: name1 Fruit: name2 Fruit: name5 Fruit: name3 Fruit: name5
Fruit: Orange Fruit: Apple Fruit: name5 Fruit: Mango Fruit: name5
Ответ №2:
Вы можете использовать регулярное выражение для поиска совпадений и использовать его для замены совпадающих слов в строке.
import re
dict1 = {'name1': 'Orange', 'name2': 'Apple', 'name3': 'Carrot', 'name4': 'Mango'}
a ="Fruit: name1
Fruit: name2
Fruit: name5
Fruit: name4
Fruit: name5
"
pattern = re.compile(r"w :s (w )")
match = re.findall(pattern, a)
for item in match:
if item in dict1.keys():
a = a.replace(item, dict1[item])
print(a)
Вывод:
'Fruit: Orange Fruit: Apple Fruit: name5 Fruit: Mango Fruit: name5 '