Ключ с номером 0 не найден в словаре

Здравствуйте!

Подскажите пожалуйста, как исправить ошибку KeyError : 0 ?

Я уже прочитал, что это означает, что ключ с номером 0 не найден в словаре. Но где именно это используется в коде и что нужно изменить я не понимаю.

Код следующий :

PythonВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

import networkx as nx
import itertools
import numpy as np
 
def calculate_rmsd(graph1, graph2):
    # Проверка, что оба графа имеют одинаковое количество вершин
    if len(graph1) != len(graph2):
        return "Графы имеют разное количество вершин"
 
    # Создание матрицы расстояний для каждого графа
    dist_matrix1 = create_distance_matrix(graph1)
    dist_matrix2 = create_distance_matrix(graph2)
 
    # Вычисление среднеквадратичного отклонения между матрицами расстояний
    rmsd = np.sqrt(np.mean(np.square(dist_matrix1 - dist_matrix2)))
 
    return rmsd
 
def create_distance_matrix(graph):
    # Создание матрицы расстояний для графа
    n = len(graph)
    dist_matrix = np.zeros((n, n))
 
    for i in range(n):
        for j in range(n):
            # Вычисление Евклидова расстояния между координатами вершин
            dist_matrix[i][j] = np.linalg.norm(graph[i] - graph[j])
 
    return dist_matrix
 
 
 
 
 
 Определяем функцию для поиска всех изоморфизмов графа
def find_isomorphisms(graph):
    # Инициализируем список для хранения всех изоморфизмов
    isomorphisms = []
 
    # Получаем список всех вершин графа
    nodes = list(graph.nodes())
 
    # Генерируем все возможные перестановки вершин графа
    permutations = itertools.permutations(nodes)
 
    # Перебираем все перестановки вершин
    for permutation in permutations:
        # Создаем временный граф с использованием текущей перестановки
        temp_graph = nx.relabel_nodes(graph, dict(zip(nodes, permutation)))
 
        # Проверяем, является ли временный граф изоморфным с исходным графом
        if nx.is_isomorphic(graph, temp_graph):
            # Добавляем изоморфный граф в список изоморфизмов
            isomorphisms.append(temp_graph)
 
    # Возвращаем список всех изоморфизмов
    return isomorphisms
 
Основная часть программы
Создаем граф с пронумерованными вершинами
graph = nx.Graph()
graph.add_nodes_from([1, 2, 3])
 
Добавляем ребра в граф
graph.add_edges_from([(1, 2), (2, 3)])
 
Вызываем функцию поиска всех изоморфизмов
isomorphisms = find_isomorphisms(graph)
 
Выводим найденные изоморфизмы и вычисленные значения RMSD
for i, isomorphism in enumerate(isomorphisms):
    rmsd = calculate_rmsd(graph, isomorphism)
    print(f"Изоморфизм {i+1}: {isomorphism}, RMSD: {rmsd}")