2017-05-02 137 views
0

我在路由上計算時間有問題。它始於其表示路由的字典:在字典中循環python

Routing = [('Car1', 'C3', 'C2'),('Car1', 'IT', 'C3'),('Car1', 'C2', 'C4'),('Car1', 'C6', 'IT'),('Car1', 'C4', 'C5'),('Car1', 'C5', 'C6')] 

從i每個運動[1]至i [2]在路由具有其自己的時間和存在用於IT的開始時間:

Time = {('C3', 'C2'): 0,('IT', 'C3'): 14,('C2', 'C4'): 1,('C6', 'IT'): 14,('C4', 'C5'): 0,('C5', 'C6'): 0} 
Start_time_IT: 128 

如您所知,car1 = IT,C3,C2,C4,C5,C6,IT的路由。 IT是開始和結束點。我需要的是計算到貨時間爲每一個步驟,並用這樣的詞典結束:

Arrival_time = {'C3': 142, 'C2': 142, 'C4': 143, 'C5': 143, 'C6':, 143, 'IT': 157} 

例如,C3是在IT的起始時間是128和旅行時間C3計算其是14,所以我最終得到142等等。

現在我真的很困難與建設Arrival_time。我嘗試過while while循環,但是我沒有得到Arrival_time在循環過程中所發生錯誤的正確值。

上面是一個例子,實際上這條路線有多輛車和多個車站。有沒有人有一個想法,我可以如何解決上述情況?

Tnx提前!

+0

那麼,你想找到最短路徑,還是你的'Routing'列表描述了一條獨特的路徑? – JohanL

回答

1

使用您提供的信息,這可能會幫助您走上正確的道路。我不知道你在做什麼的完整背景,因此可能不是最優的。

def make_route(car, routing): 
    # multiple cars in routing so only get connections for the one we want 
    connections = [(r[1],r[2]) for r in routing if r[0] == car] 

    # get start 
    route = [c for c in connections if c[0] == 'IT'] 

    # join connections 
    while route[-1][1] != 'IT': 
     route += [c for c in connections if c[0] == route[-1][1]] 

    return route 


def time_route(route, Time, start_time=0): 
    times = [] 
    for r in route: 
     # look up time for the connection and add to running total 
     start_time += Time[r] 
     # add times to list - dictionaries don't preserve order 
     times.append((r[1], start_time)) 
    return times 

r = make_route('Car1', Routing) 
Arrival_time = time_route(r, Time, 128) 

這應該返回[('C3', 142), ('C2', 142), ('C4', 143), ('C5', 143), ('C6', 143), ('IT', 157)]。這是一個列表,因爲字典不會保存順序。

+0

Tnx的努力!這個工作或多或少。只有時間需要成爲字典,因爲我需要進一步計算。 –

+0

我發現了受你職能啓發的問題。 Tnx再次! :) –