我发现Python 3中没有将某些输入存储在字典中。
运行此代码:
N = int(input()) #How many lines of subsequent input
graph = {}
for n in range (N):
start, end, cost = input().split()
graph[start] = {end:cost}
#print("from", start, ":", graph[start])
print(graph)
输入:
3
YYZ SEA 500
YYZ YVR 300
YVR SEA 100
我的程序输出:
{'YYZ': {'YVR': '300'}, 'YVR': {'SEA': '100'}}
由于字典中没有SEA痕迹,第一行提到YYZ似乎被第二行提到YYZ覆盖。
是什么导致此问题,我该如何解决?
答案 0 :(得分:3)
您正在用替换值覆盖键'YYZ'
的值。这是字典的预期行为。我的建议是使字典列表的值而不是单个项目的值,所以用这样的代码替换您的作业代码
graph.setdefault(start, []).append({end:cost})
尝试一下,看看是否适合您的用例。
答案 1 :(得分:2)
字典中每个键只能包含一个值,因此,按预期,该键的第二个引用将覆盖第一个。
在这种情况下,您要做的是为每个键存储一个列表项,并将其追加到列表中:
start, end, cost = input().split()
if not start in graph:
graph[start] = []
graph[start].append( {end:cost} )