раньше работало норм, решил добавить строки чтобы удаляло ненужные тире (что-лио и тд), работало тоже норм, потом перестало работать. то есть с этими строчками 0 слов выводит, а если строки убрать:
1. sich anbiedern bei - втираться в доверие к (кому л)
2. sich bekennen zu - признавать себя причастным к (чему л)
3. demonstrieren für, eintreten für - выступать за (что л)
4. der Anspruch auf (A) - право на (требовать что л)
код:
Ссылка скрыта от гостей
Основная проблема заключается в том, что строки, содержащие "-л" и "-т", заменяются, но после этих операций строки могут больше не содержат символ "-", который необходим для правильного разделения ключа и значения.
В текущем коде строки, содержащие символы "-л" и "-т", изменяются, и, если после этих замен в строке больше не остается символа "-", код не может правильно разделить строку на ключ и значение, из-за чего словарь остаётся пустым.
Чтобы исправить эту проблему, можно попробовать заменить строки не сразу, а сначала разделить строку на ключ и значение, а затем уже выполнить замены в значении. Вот как это может выглядеть:
Python:
v2 = {}
for v in v3:
if "-" in v:
c, b = v.split("-", 1)
if "-" in b:
c, b = b.split("-", 1)
if "*" in c:
c = c.replace("*", "")
b = b.replace("-л", " л")
b = b.replace("-т", " ")
b = b.replace("кем-чем", "кем чем")
b = b.replace("по-", " по ")
for digit in "0123456789":
b = b.replace(digit, "")
key = c.strip()
value = b.strip()
v2[key] = value
Вариант 2: Проверка на наличие символов перед разделением
Можно сначала сделать все замены в строке, а потом уже проверять и разделять её по символу "-". Это уменьшит шанс потери разделяющего символа.
Python:
v2 = {}
for v in v3:
# Замены в строке перед разделением
v = v.replace("-л", " л")
v = v.replace("-т", " ")
v = v.replace("кем-чем", "кем чем")
v = v.replace("по-", " по ")
for digit in "0123456789":
v = v.replace(digit, "")
if "-" in v:
c, b = v.split("-", 1)
if "*" in c:
c = c.replace("*", "")
key = c.strip()
value = b.strip()
v2[key] = value
Вариант 3: Использовать регулярные выражения
Этот вариант использует регулярные выражения для более гибкой обработки строк, особенно если формат строки может изменяться.
Python:
import re
v2 = {}
for v in v3:
# Замены в строке перед разделением
v = re.sub(r"-л", " л", v)
v = re.sub(r"-т", " ", v)
v = re.sub(r"кем-чем", "кем чем", v)
v = re.sub(r"по-", " по ", v)
# Удаление цифр
v = re.sub(r"\d", "", v)
if "-" in v:
c, b = v.split("-", 1)
if "*" in c:
c = c.replace("*", "")
key = c.strip()
value = b.strip()
v2[key] = value
Вариант 4: Использование функции для обработки строки
Можно создать отдельную функцию, которая сначала выполняет все замены, а затем возвращает разделенные ключ и значение.
Python:
def process_line(v):
v = v.replace("-л", " л")
v = v.replace("-т", " ")
v = v.replace("кем-чем", "кем чем")
v = v.replace("по-", " по ")
for digit in "0123456789":
v = v.replace(digit, "")
if "-" in v:
c, b = v.split("-", 1)
if "*" in c:
c = c.replace("*", "")
return c.strip(), b.strip()
return None, None
v2 = {}
for v in v3:
key, value = process_line(v)
if key and value:
v2[key] = value
Вариант 5: Проверка наличия разделителя перед заменами
В этом варианте замены выполняются только в значении после того, как строка уже была разделена.
Python:
v2 = {}
for v in v3:
if "-" in v:
c, b = v.split("-", 1)
if "*" in c:
c = c.replace("*", "")
# Проверяем, чтобы не потерять разделитель
if "-" in b:
c, b = b.split("-", 1)
# Замена символов в значении
b = b.replace("-л", " л")
b = b.replace("-т", " ")
b = b.replace("кем-чем", "кем чем")
b = b.replace("по-", " по ")
for digit in "0123456789":
b = b.replace(digit, "")
key = c.strip()
value = b.strip()
v2[key] = value
Попробуйте разные варианты и посмотрите, какой из них лучше всего решает вашу задачу.