代码之家  ›  专栏  ›  技术社区  ›  teddy

为什么从.txt文件读取值后会出现keyerror?

  •  0
  • teddy  · 技术社区  · 7 年前

    所以我试图将一个已经在工作的程序改为从.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行 超出度[x]+=1

    KeyError:1

    当我用 #V #E 代码的开头,运行得很好。

    1 回复  |  直到 6 年前
        1
  •  0
  •   W4t3randWind    7 年前

    上面评论的“v”看起来像

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

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

    [1,2,3,4,5]
    

    但是,请注意,在print语句中,a是作为单个元组的列表编写的。嵌套是不同的。

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

    当您迭代a的第一个维度时,您将只实例化hashmap,如下所示:

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

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