Я думаю, вы ошиблись узлами с метками узлов.Наличие дублирующих узлов в графе на самом деле не имеет смысла.Мне кажется, что вам здесь нужно иметь дубликаты меток.
Чтобы добавить понятие меток в график, нужно иметь словарь, который отображает идентификаторы узлов (уникальные) и метки узлов (возможно, не уникальные).:
user_input = "aaaaabbbbcccdde"
labels = {i: l for i, l in enumerate(user_input)}
nodes = labels.keys()
Используя их, вы можете построить свой график:
G = nx.DiGraph()
G.add_nodes_from(nodes)
Затем вы можете, например, нарисовать его:
pos = nx.spring_layout(G)
nx.draw(G, pos)
nx.draw_networkx_labels(G, pos, labels)
И, конечно, (вероятно, самое главное), каждый раз, когда у вас есть идентификатор узла, скажем, node_id
, вы можете получить его метку, используя labels[node_id]
.Я предлагаю всегда работать с идентификатором узла, а затем в самом конце, когда вам нужно напечатать результат, вы можете перевести идентификаторы узла во что-то читаемое человеком, т.е.метки узлов.
В зависимости от сложности вашего кода, вам также может быть полезно прикрепить метки к самим объектам узла, networkx позволяет:
nx.set_node_attributes(G, labels, 'label')
После этого у вас будет доступ к узлуатрибуты:
for u in G.nodes(data=True):
print(u)
break
# Or if you have a node_identifier:
node_id = 1
print(G.node[node_id])
Это приведет к выводу:
(0, {'label': 'a'})
{'label': 'a'}