Python:从.txt读取值后的KeyError

时间:2018-05-23 17:38:14

标签: python vertex edge keyerror degrees

所以我试图改变已经工作的程序来读取.txt文件,但只有我看到的是KeyError。

#V = ([1,2,3,4,5])
#E = ([(1,2),(1,3),(2,3),(3,5),(5,4)])

import ast
with open('v.txt') as V:
  A = ast.literal_eval(V.read())
with open('e.txt') as E:
  B = ast.literal_eval(E.read())

print(A)
print(B)

indegree = {}
outdegree = {}

for x in A:
  indegree[x] = 0
  outdegree[x] = 0

for x,y in B:
  outdegree[x] += 1
  indegree[y] += 1

for x in A:
  print("Outdegree for vertex", x,"=", outdegree[x])
  print("Indegree for vertex", x,"=", indegree[x])

输出结果为:

  

[(1,2,3,4,5)]

     

[(1,2),(1,3),(2,3),(3,5),(5,4)]

     

第21行,在   outdegree [x] + = 1

     

KeyError:1

当我使用#V#E的值以及代码的开头运行它时,它运行完全正常。

1 个答案:

答案 0 :(得分:0)

好像是评论的' V'上面有形状

([1,2,3,4,5])

当我在我的控制台上运行它时,它会被读入并解释到内部列表,变为:

[1,2,3,4,5]

但是,请注意,在您的打印语句中,A被写为单个元组的列表。嵌套是不同的。

[(1, 2, 3, 4, 5)]

当你遍历A的第一个维度时,你只会按如下方式实例化hashmap:

{(1, 2, 3, 4, 5): 0}

我的猜测是预期的行为是{1: 0, 2:0, ...}。我建议您使用标准数据格式(如tsv / csv)来简化数据加载。其次,如果你改变括号的顺序,你应该得到你想要的答案