Для этого имеет смысл двухсторонний граф, и если вы используете библиотеку networkX
, вы легко можете ее создать.Предполагая, что у вас есть элементы в A
и B
и список, содержащий ребра
A = ['a1', 'a2', 'a3', 'a4']
B = ['b1', 'b2', 'b3', 'b4']
edges = [('a1', 'b1', 0.5), ('a1', 'b2', 0.3), ('b3', 'a4', 0.1)]
G = nx.Graph()
G.add_nodes_from(A], bipartite=0) # Add the node attribute "bipartite"
G.add_nodes_from(B, bipartite=1)
G.add_weighted_edges_from(edges)
Обратите внимание, что это просто нормальный граф, и единственный способ сказать, что он является двухсторонним, это черезсобственность bipartite
.Если вам нужно что-то сделать, например, проецировать график или получить доступ только к одной стороне, то об этом есть в документации networkX .