我的数据如下,
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]}}
任何人都可以告诉我在循环中缺少什么吗? 感谢
答案 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