Добавление значений в словарный ключ в python - PullRequest
0 голосов
/ 27 февраля 2020

Я хочу отсканировать текст и извлечь данные после определенного ключевого слова. В этом случае я сканирую файл sql. Мой словарь будет иметь такую ​​структуру (вложенную):

my_dict = {sql_file:{'select': table_name, 'join': table_name}}

У меня есть al oop, который проходит через файл sql, находит ключевое слово и извлекает таблицу для каждого файла в каталоге. Однако, поскольку мне нужно обновить словарь после сканирования для ключевого слова select , затем вернитесь и обновите словарь для ключевого слова join, обновление закончится перезаписью my исходные словарные значения. Вот как работает l oop.

for key, val in file_dict.items(): # I have a dictionary that has {filename:sql_script} for key,val
    for match in select.finditer(val): # regex iterator to find all matches
        if match.group(1):
            my_dict[sql_file] = {'select': match.group(1)})


for key, val in file_dict.items(): # I have a dictionary that has {filename:sql_script} for key,val
        for match in join.finditer(val): # regex iterator to find all matches
            if match.group(1):
                my_dict[sql_file] = {'join': match.group(1)})

Это не приводит к добавлению совпадений select, затем добавлению совпадений join, просто перезаписывает select и заменяет его на join. В словарях нет метода добавления, поэтому я не уверен, что делать дальше.

1 Ответ

0 голосов
/ 27 февраля 2020

Из вашего my_dict[sql_file] вы получите другой словарь, содержащий {'select': table_name, 'join': table_name}. Поэтому вы можете получить доступ к этому словарю так же, как и к другому:

for key, val in file_dict.items():
    for match in select.finditer(val):
        if match.group(1):
            my_dict[sql_file]['select'] = match.group(1)


for key, val in file_dict.items():
        for match in join.finditer(val):
            if match.group(1):
                my_dict[sql_file]['joinn'] = 'join': match.group(1)
...