Python 从平面表构建节点关系

Python 从平面表构建节点关系,python,graph,tree,Python,Graph,Tree,我有一个平面桌子形式的交通网络。内容可描述如下: Start_Node,Next_Node,End_Node 10,100,1000 100,200,1000 200,1000,1000 20,1000,1000 我想找到开始节点对和结束节点对之间的所有节点。因此,对于上面的示例,它看起来像: {10_1000: [100,200,1000] 20_1000: [1000] 100_1000: [200,1000] 200_1000: [1000]} 下面是我的尝试(我正在尝试学习pytho

我有一个平面桌子形式的交通网络。内容可描述如下:

Start_Node,Next_Node,End_Node
10,100,1000
100,200,1000
200,1000,1000
20,1000,1000
我想找到开始节点对和结束节点对之间的所有节点。因此,对于上面的示例,它看起来像:

{10_1000: [100,200,1000]
20_1000: [1000]
100_1000: [200,1000]
200_1000: [1000]}
下面是我的尝试(我正在尝试学习python,因此将非常欣赏该语言的任何方向)


我需要在列表中添加一个虚拟0,以后可以删除,但必须有更好的方法。

为什么结果中只有10μ1000和20μ1000,而不是100μ1000和200μ1000?是的,我的错,我也会编辑并添加它们。
import pandas as pd

reg = pd.read_csv('nw.csv')

start_node = reg.start.unique()
end_node = reg.end.unique()
hop_dic = {}

for i in start_node:
    for j in end_node:
        key = str(i) + " - " + str(j)
        node = []
        iter = 0
        for row in reg.itertuples():
            while(row[1]==i and row[3]==j and row[2]!=j and iter < 10):
                hop_dic[key] = node.append(row[2])
                i = row[2]
                iter = iter + 1
                print "i =",i,"j= ",j,"iter= ",iter
import pandas as pd

reg = pd.read_csv('regularbagfwd.csv')

start_node = reg.start.unique()
end_node = reg.end.unique()
hop_dic = {}
for i in start_node:
    for j in end_node:
        key = str(i) + " - " + str(j)
        iter = 0
        reg_sub = reg.loc[reg.end == j]
        node = [0]
        while(node[-1] != j): #Checking if the last element is the end node
            for row in reg_sub.itertuples():
                if row[1]==i and row[2]==j: #last element 
                    node.append(row[2])
                    hop_dic[key] = node
                    print "i =",i,"j= ",j,"iter= ",iter,"next= ",row[2]
                    print hop_dic
                    break
                elif row[1]==i and row[2]!=j: #Not last element
                    node.append(row[2])
                    hop_dic[key] = node
                    i = row[2]
                    print "i =",i,"j= ",j,"iter= ",iter,"next= ",row[2]
                    print hop_dic
                iter = iter + 1
            if iter > 500: #I will break the while loop, untidy I know
                break