Почему я получаю KeyError после чтения значений из файла .txt? - PullRequest
0 голосов
/ 23 мая 2018

Поэтому я пытаюсь изменить уже работающую программу для чтения из файла .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 Ответ

0 голосов
/ 23 мая 2018

Похоже, что вышеприведенный комментарий 'V' имеет форму

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

Это читается и интерпретируется во внутренний список, когда я запускаю его на своей консоли, становясь:

[1,2,3,4,5]

Тем не менее, обратите внимание в ваших утверждениях печати, что вместо этого A записывается в виде списка одного кортежа.Вложенность отличается.

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

Когда вы выполняете итерацию по первому измерению A, вы создаете экземпляр хеш-карты только следующим образом:

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

Я предполагаю, что предполагаемое поведение{1: 0, 2:0, ...}.Я бы посоветовал вам использовать стандартные форматы данных (например, tsv / csv), чтобы упростить загрузку данных.Во-вторых, если вы измените порядок скобок, вы должны получить ожидаемый ответ

...