Удалить часть значения словаря

Всем привет, у меня есть словарь

directories = {
    '1': ['2', '11'],
    '2': ['3'],
    '3': []
}

И я хотела бы удалять из него те значения, которые вводит пользователь.

Пользовательский ввод: 2

Результат:

directories = {
    '1': ['11'],
    '2': ['3'],
    '3': []
}

Если я правильно понимаю функционал словарей, то я должна перезаписать ключи, но не понимаю как это реализовать. Спасибо


Ответы (1 шт):

Автор решения: insolor

Просто идете циклом по значениям в словаре (directories.values()), если в значении (списке) есть введенный элемент, то удаляем его из списка:

directories = {
    '1': ['2', '11'],
    '2': ['3'],
    '3': []
}

doc_input = input('Введите номер документа: ')

for value in directories.values():
    if doc_input in value:
        value.remove(doc_input)
        break
else:
    # Дошли до конца цикла, и не было выхода через break
    print("Документ не найден")  

print(directories)

Тут происходит линейный поиск значений (последовательный перебор значений словаря, потом перебор элементов в списке), оптимальнее было бы хранить словарь, где ключи — это документы, а значения — директории, тогда поиск и удаление будет происходить за ~ константное время (т.к. поиск в хеш-таблице).

→ Ссылка