带边的字典和元组之间的正确索引

问题描述

我正在尝试将作为元组列表的最短路径连接到包含传输网络边缘的字典。 (152 个节点,488 条边) 字典制作如下:

#dictionary of decision variables
dec_var=wb.sheets('EDGES').range('L2:N489').value
D={}
for z in range(len(origin_nodes)):
    b = origin_nodes[z]
    D[b] = {}
    for y in range(len(dec_var)):
        if (dec_var[y][0] == b):
            D[b][dec_var[y][1]] = dec_var[y][2]

这使得 152=len(origin_nodes)*488=len(dec_var) 迭代,以完成这个字典。 L 列是边的起始节点,M 列是结束节点,N 列是为此边生成的值 0、1 或 2。

我的代码还创建了元组的最短路径列表,命名为SP,格式如下:

2000000242.1599998,[127,6.0,59.0,111.0,93.0,140.0,67.0,72.0,60.0,71.0,69.0,76.0,47.0,132.0]

ShortestPath 是一个函数,它以我上面提到的方式给出最短路径,作为一个元组。 这意味着 SP[1][0] 是 127,SP[1][1] 是 6,等等。这些数字是节点。比如这条路径是由127-6,6-59,59-111,111-93,93-140 等构成的,这些节点都存在于上面的列表中(需求),但是它们并不在同一个位置。 我想检查每个最短路径,如果它包含值为“1”的边(上面的第 3 列),如果是,则在 Excel 表中的“O”列中写入此值 = 0找到与列 N 相同的行和 1。不过,我不确定如何索引它。我已经写了这个,但不起作用。

for node in OD:
    
    for (next,c) in OD[node].items():
        SP=shortestPath(G,node,next)
       
        for node2 in SP[1]:
            
            if node2!=SP[1][-1]:
                try:
                    if D[node2][SP[1][SP[1].index(node2)+1]]==1:
                       wb.sheets('EDGES').range('O' + str(node2)).value = 0
                
                except KeyError:
                    print ("Error!")

OD 是一个包含 152 个 int 元素的字典。所以上面,进行 152 *(最短路径的节点数 -1)迭代。但我想在这里索引我上面提到的 488 条边中正确的一条。我要不要创建一个新的 for 循环,例如:

for i in len(dec_var)

但是我怎样才能通过 488 条边(edgelist)而不是根据 SP 元组中列表中元素的数量(每次都不同)来正确索引它?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)