【问题标题】:Input data in nested dictionary python在嵌套字典python中输入数据
【发布时间】:2016-01-10 04:57:35
【问题描述】:

我的数据如下,

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

来自屏幕的输入是格式,其中第一行中的第二个变量是下面的行数,即没有。循环的次数,在下面的情况下为 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]}} 

谁能告诉我循环中缺少什么? 谢谢

【问题讨论】:

  • 你不能索引到一个不存在的字典,例如graph[1] 是 KeyError。您可以使用来自collectionsdefaultdict,例如graph = defaultdict(dict)

标签: python json python-2.7 loops dictionary


【解决方案1】:

问题是您的 graph 被定义为 {} ,它没有键:值对,因此当您尝试这样做时 -

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

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

一种简单的方法是使用dict.setdefault()x 键设置为新字典,如果graph 中不存在该键,则将x 键设置为字典,否则返回它dict.setdefault() 将返回键的值。示例 -

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

上述代码的演示结果 -

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

【讨论】:

  • 感谢您的回复,如果您注意到我的数据集的键为字符串 {'1':{'2':[15,20]}}... 我该怎么做?
  • 使用str(x)str(y) ?还是一开始就不将它们映射到 int?
  • 嗯,这取决于你想用这些做什么,但字典不能有重复的键,这是肯定的。
  • 顺便说一句,该列表无效,您在寻找元组列表吗?列表不能有 [4:[0,1]..
  • 如果您想要元组列表而不是[4: [0,1].. 列表,您可以在.setdefault() 中使用[] 创建一个列表,然后附加元组而不是现在正在执行的操作。
猜你喜欢
  • 2021-02-12
  • 2022-12-05
  • 1970-01-01
  • 2021-04-26
  • 2018-05-31
  • 1970-01-01
  • 2015-08-05
  • 2011-12-25
  • 1970-01-01
相关资源
最近更新 更多