NetworkX основан на идее, что графики могут действовать как словари. Вам не нужен пользовательский объект для работы в качестве узлов, поскольку узлы могут иметь произвольные свойства, добавленные в их «словари».
Рассмотрим следующий интерактивный сеанс:
>>> import networkx as nx
>>> G = nx.Graph()
>>> G.add_node(1)
>>> G.node[1]['ipaddress'] = '8.8.8.8'
>>> G.node[1]['longitude'] = 37
>>> G.node[1]['latitude'] = 50
>>> G.node[1]
{'latitude': 50, 'ipaddress': '8.8.8.8', 'longitude': 37}
>>> G.node[1]['ipaddress']
'8.8.8.8'
Здесь создается граф с одним узлом 1
, с которым связаны ipaddress
, longitude
и latitude
. Вы обращаетесь к этому узлу напрямую в постоянное время, запрашивая график для узла, и получаете его свойства практически таким же образом.
Чтобы обратиться к конкретным узлам, у вас есть несколько возможностей. Вы можете, например, использовать словарь для хранения списка или набора узлов для любых желаемых свойств. Вторая возможность - которая полезна только для одного свойства, уникального для каждого узла, - это непосредственное использование свойства в качестве узла. Например, для IP-адресов:
>>> H = nx.Graph()
>>> H.add_node('8.8.8.8', longitude=37, latitude=50)
>>> H.node['8.8.8.8']
{'latitude': 50, 'longitude': 37}
Здесь я также воспользовался удобством, предоставляемым NetworkX, для указания свойств при создании узла.