根据用户输入在 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()
我需要创建类似这样的东西来表示基于用户输入的有向加权图 -
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()