0

I have functions that create an adjacency list:

adj_list = {}
list1 = []
  
def add_node(node):
  if node not in list1:
    list1.append(node)
  else:
    print(f'Node {node} already added')

def add_edge(node, target,weight):
  temp= []
  if node in list1 and target in list1:
    temp.append(target,weight)
    adj_list[node] = temp

  elif node in adj_list:
    temp.extend(adj_list[node])
    temp.append(target,weight)
    adj_list[node] = temp 
  else:
    print('Node does not exit') 

but I can only add nodes and edges manually like this:

add_node(0)
add_node(1)

add_edge(0,1,2)
add_edge(1,2,2)

But I have a relatively large graph, and I can't add them all by hand, so I put sample graph data in a data frame:

node target weight
0 1 2
1 2 2
2 3 4
3 0 5
3 4 3
4 0 1

Looping over df['node'] works:

for i in df['node']:
  add_node(i)

but I can't find a way to do the same for add_edges

So what I am trying to build is a function that takes a data frame and returns a graph, like this:

# graph
0  --->  [[1, 2]]
1  --->  [[2, 2]]
2  --->  [[3, 4]]
3  --->  [[0, 5], [4, 3]]
4  --->  [[0, 1]]

# adj_list
{0: [[1, 2]], 1: [[2, 2]], 2: [[3, 4]], 3: [[0, 5], [4, 3]], 4: [[0, 1]]}

Also, I know about libraries like networkx but I need to implement this from scratch.

1 Answer 1

1

You can easily do the same for add_edge, by looping over each row of the dataframe using iterrows:

for idx, row in df.iterrows():
    add_edge(row.node, row.target, row.weight)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.