根据用户输入在 Python 中创建加权有向图

Creating Weighted Directed Graph in Python based on User Input

我需要创建类似这样的东西来表示基于用户输入的有向加权图 -

graph = {
          'a': {'b': 1, 'c':  4},
          'b': {'c':  3, 'd':  2, 'e':  2},
          'c': {},
          'd': {'b':  1, 'c':  5},
          'e': {'d': -2}
        }

到目前为止,

import pprint

graph = {}
values = {}
v = int(input("Enter number of vertices: "))

print("Enter vertices(keys) : ")
for i in range(v):
    graph.setdefault(input())

edges = {}
for x in graph:
    edges.setdefault(x)

for i in graph:
    graph[i] = edges

print("Enter weights: ")
for i in graph:
    print(i)
    for j in graph[i]:
        var = input()
        graph[i][j] = var

pprint.pprint(graph)

我试过了,但出于某种原因,它正在用上次读取的权重替换之前读取的权重。任何解决方案?

你有缩进错误吗?

而不是

for i in graph:
    print(i)
for j in graph[i]:
    var = input()
    graph[i][j] = var

您可能打算写

for i in graph:
    print(i)
    for j in graph[i]:
        var = input()
        graph[i][j] = var

?

for i in graph:
    graph[i] = edges

您正在为 graph 的每个键分配相同的字典 (edges)。因此,当您为它们中的任何一个赋值时,您就是将该值赋给它们中的 all。看起来您真正想要的是 edges。在这种情况下,由于您没有为 edges 分配任何可变值,浅拷贝就足够了:

for i in graph:
    graph[i] = edges.copy()