基于用户Inpu在Python中创建加权有向图

2024-05-15 03:14:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

我试过了,但出于某种原因,它正在用上次读取的权重替换先前读取的权重。有什么解决办法吗?


Tags: 用户inimportforinputvargraphpprint
2条回答

有缩进错误吗?

而不是

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的每个键分配相同的dict(edges)。因此,当您为它们中的任何一个赋值时,您将该值赋给它们中的所有。看起来你真正想要的是edges拷贝。在这种情况下,由于没有为edges分配任何可变值,因此浅拷贝就足够了:

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

相关问题 更多 >

    热门问题