字典条目被覆盖了吗?

时间:2018-07-12 19:42:13

标签: python arrays python-3.x dictionary input

我发现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覆盖。

是什么导致此问题,我该如何解决?

2 个答案:

答案 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} )