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

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:
    graph[i] = edges


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

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

关于python - 根据用户输入在Python中创建加权有向图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40040304/

10-11 00:35
查看更多