Задать вопрос

KeyError: при реализации алгоритма поиска в ширину, что я делаю не так?

Только начал изучать этот алгоритм. Не могу понять почему когда я вызываю функцию - получаю ошибку. Вроде все правильно делаю. Направьте в нужное русло :)

from collections import deque


""" Реализация графов """
graph = {}
graph["you"] = ["alice", "bob", "claire", "mam"]




def person_is_seller(name):
    return name[-1] == "m"


def search(name):
    search_queue = deque()
    search_queue += graph[name]
    searched = [] # Массив для отслеживания проверенных данных
    while search_queue:
        person = search_queue.popleft()
        if not person in searched: #Продолжается проверка только если в массиве searcehed данные не засвечены
            if person_is_seller(person):
                print(person + "is a mango seller ")
                return True
            else:
                search_queue += graph[person] # Данные отмечаются как проверенные 
                searched.append(person) #Данные добавляются в массив searched
            return False


ошибка:

Traceback (most recent call last):
  File "C:\Users\Vladik\Desktop\Новая папка\graph.py", line 32, in <module>
    search("you")
  File "C:\Users\Vladik\Desktop\Новая папка\graph.py", line 28, in search
    search_queue += graph[person]
KeyError: 'alice'
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
У graph судя по строчке graph["you"] = ["alice", "bob", "claire", "mam"]
только один ключ - “you”
Поэтому оно и не находит среди ключей словаря graph ключ “alice”.
Ответ написан
anatoly253
@anatoly253
Столкнулся с такой же проблемой)
Нужно просто добавить пары "ключ-значение" для этих значений
["alice", "bob", "claire", "mam"]

graph["alice"] = []
graph["bob"] = []
graph["claire"] = []
graph["mam"] = []
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы