Я хочу использовать словарные ключи, чтобы получить их соответствующие значения, а затем использовать эти значения для ссылки на определенные элементы в моем 2D-массиве.
У меня есть двумерная фиктивная матрица, которую я создаю так:
self.matrix = [[0] * self.length] * self.length
, который создает матрицу N x N в зависимости от длины
У меня также есть отсортированный список узлов, которые имеют имена (= ключи), и я хочу сопоставить эти имена с индексами (= значения) 0..N
self.data = dict(zip(self.nodes, self.index_array))
Все это прекрасно работает до тех пор, пока я не попытаюсь заполнить мою фиктивную матрицу смежности "1" для Ni, соединенного с Nj.«ребра» - это список кортежей :dge = [("u1", "v1"), ("u1", "v2"), ..., ("ui", "uj")]
for row in edges:
self.matrix[self.data[row[0]]][self.data[row[1]]] = 1
Теперь, когда я запускаю описанный выше метод, я получаю матрицу, которая полна единиц, когда должны быть только единицы для каждого соединения между узлом u и узлом v
Я попытался смоделировать этопроблема в меньшей степени, и здесь это работает отлично!Я не знаю, что происходит.
a = {"3": 0, "4": 1, "5": 2}
edges = [("3", "5"), ("4", "3"), ("5", "3")]
nodes = ["3", "4", "5"]
index = [0, 1, 2]
data = dict(zip(nodes, index))
matrix = [[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
for row in edges:
matrix[data[row[0]]][data[row[1]]] = 1
print(a)
print(data)
print(matrix)