Словари в Python (и на любом другом языке, который я знаю) имеют уникальные значения для каждого ключа и будут перезаписывать их, когда вы добавляете новое значение для существующего ключа.
Рассмотрим другой тип структуры данныхкак набор кортежей, например,
{('a','b'), ('a','c'), ...}
Или, как выглядит, как будто вы создаете граф, словарь, значения которого представляют собой списки вершин вместо отдельных вершин, например,
{'a':['b','c'],...}
Чтобы создать набор кортежей, замените строку
graph[key] = val
на
graph.append((key, val))
Чтобы создать словарь для списков, используйте
if key in graph:
graph[key].append(val)
else:
graph[key] = [val]
Надеюсь, это поможет!