Прежде всего, я хочу сказать, что вопрос, который я задал, трудно задать «компактным» образом, поэтому некоторые вещи будут объяснены ниже.
У меня есть два словаря, скажем такэто regex = {}
и dict = {}
.
Первый из них содержит шаблоны поиска и замены соответственно как keys
и values
.Так это выглядит так:
# about 50 key/value pairs
regex = {
'find1' : 'replace1',
'find2' : 'replace2',
...
'findX' : 'replaceX'
}
Второй выглядит так:
# about 500,000 key/value pairs
dict = {
'key1' : 'value1',
'key2' : 'value2',
...
'keyX' : 'valueX'
}
Для каждого keyX
, valueX
из dict
Я хочу проверить, еслиvalueX
включает findX
из regex
, если да, я хочу заменить его на replaceX
и сохранить в том же (dict
) или новом словаре или списке (использовал новый список в коде ниже),
Я пробовал с этим кодом:
for keyX, valueX in dict.items():
for patterns in regex.items():
if re.search(patterns[0], valueX)
new_value = re.sub(patterns[0], patterns[1], valueX)
new_line = keyX + '\t' + new_value
new_list.append(new_line)
Мой механизм работает неправильно: для каждого valueX
он должен проверять, содержит ли он какой-либо из findX
, заменить его на replaceX
, сохраните, но вместо этого я получаю беспорядок в списке вывода.Дубликаты new_value
с для разных keyX
с.Я знаю, что что-то не так с итерацией по моим словарям (вероятно, по словарю регулярных выражений), но я не знаю, как это исправить.
РЕДАКТИРОВАТЬ (примеры):
regex = {
's t n': 's n',
'e0': 'i0',
'j a0': 'j i0'
}
dict = {
'известный': 'i0 z vj e1 s t n y0 j',
'сестра': 'sj e0 s t r a1'
'январь': 'j a0 n v a1 rj'
}