在嵌套字典python中输入数据

时间:2015-10-12 16:20:17

标签: python json python-2.7 loops dictionary

我的数据如下,

graph = {'1':{'2':[0,5]}, '2':{'4':[16,68]}}

即使以下代码适用于我的IDLE

d = {1 : {2 : [15,20]}}
d[1][3] = [1,6]
print d[1][3]

但是当我尝试从屏幕读取并从输入中填充我的数据集时,我得到错误 我的循环就像这样

graph = {}
Q = {}
N,M,T=map(int,raw_input().split())
for i in range(0,M):
    x,y,t1,t2=map(int,raw_input().split())
    graph[x][y] = [t1,t2]
print graph

来自屏幕的INPUT格式为,第一行中的第二个变量是下面的行数,即no。循环次数,在下面的情况下为5

4 5 20 
1 2 15 20 
1 3 1 6 
2 4 25 30 
3 4 2 7 
3 4 30 35

以上输入应将数据集设为

graph = {'1':{'2':[15,20], '3':[1,6]}, '2':{'4':[25,30]}, '3':{'4':[2,7], '4':[30,35]}} 

任何人都可以告诉我在循环中缺少什么吗? 感谢

1 个答案:

答案 0 :(得分:2)

问题是,您的graph被定义为{},其中没有关键:值对,因此当您尝试执行此操作时 -

graph[x][y] = [t1,t2]

还没有graph[x],它不会自动将graph[x]设置为字典,您需要手动设置它。

一种简单的方法是使用dict.setdefault()用新字典设置x密钥,如果密钥不存在于{{}}中,则会将x密钥设置为字典{1}}并返回它,否则dict.setdefault()将返回密钥的值。示例 -

graph

以上代码的演示结果 -

graph = {}
Q = {}
N,M,T=map(int,raw_input().split())
for i in range(0,M):
    x,y,t1,t2=map(int,raw_input().split())
    graph.setdefault(x, {})[y] = [t1,t2]
print graph