2015-05-01 19 views
5

To jest moje pierwsze pytanie, a właściwie po raz pierwszy próbuję tego, ale przeczytałem zasady pytań i mam nadzieję, że moje pytanie jest zgodne z wszystkimi z nich.Algorytm najkrótszej ścieżki za pomocą słowników [Python]

Mam projekt dla tematu mojego algorytmu i zaprojektować gui dla algortymu o najkrótszej ścieżce dijkstra. Zdecydowałem się na użycie Pythona, ponieważ jest to język, który chciałbym opanować. W rzeczywistości staram się przez ponad tydzień i mam kłopoty na drodze. Ale tak czy inaczej to dobra zabawa :)!

wybrałem do reprezentowania mojej reżyserii wykres jako słownika w ten sposób:

g= {'A': {"B": 20, 'D': 80, 'G' :90}, # A can direct to B, D and G 
'B': {'F' : 10}, 
'F':{'C':10,'D':40}, 
'C':{'D':10,'H':20,'F':50}, 
'D':{'G':20}, 
'G':{'A':20}, 
'E':{'G':30,'B':50}, 
'H':None} # H is not directed to anything, but can accessed through C 

więc kluczem jest Vertice a wartość jest związane vetrices i ciężary. To jest przykład wykresu, ale planowałem poprosić użytkownika o wpisanie własnych szczegółów wykresu i zbadanie najkrótszej ścieżki między dwoma węzłami [początek -> koniec] Problem jednak polega na tym, że nawet nie wiem, jak uzyskać dostęp wewnętrzna słowniku więc mogę pracować na wewnętrznych paramteters i próbowałem wiele sposobów, jak te dwa:

for i in g: 
    counter = 0 
    print g[i[counter]]  # One 
    print g.get(i[counter]) # Two 

ale zarówno mi dać taki sam efekt, który jest: (Zauważ, że nie mogę przejść and Play z wewnętrznymi paramters)

{"B": 20, 'D': 80, 'G' :90} 
{'F' : 10} 
{'C':10,'D':40} 
{'D':10,'H':20,'F':50} 
{'G':20} 
{'A':20} 
{'G':30,'B':50} 
None 

więc moje pytanie brzmi, czy mógłbyś mi pomóc w jaki sposób uzyskać dostęp do wewnętrznych słowników, więc mogę zacząć pracę na algorytmie í tself. Bardzo dziękuję z góry i dziękuję za przeczytanie.

+3

Słowniki mogą mieć dostęp za pomocą słownika ["wartość"]; ponieważ jest to para klucz-wartość. Witamy w Stack Overflow i bardzo szanuję tych, którzy czytają zasady. Powodzenia! – richerlariviere

Odpowiedz

2

Korzystanie z for pętli będzie iteracyjne nad klucze słownika, a za pomocą przycisku, można pobrać wartości, który jest skojarzony z kluczem. Jeśli sama wartość jest słownikiem, możesz użyć innej pętli.

for fromNode in g: 
    neighbors = g[fromNode] 
    for toNode in neighbors: 
     distance = neighbors[toNode] 
     print("%s -> %s (%d)" % (fromNode, toNode, distance)) 

Zauważ, że to zadziałało, należy użyć pustego słownika {} zamiast None gdy nie ma sąsiadów.

6

To naprawdę nie jest takie trudne i powinno być kompletne, gdy już je zobaczysz. Weźmy g. Chcemy, aby uzyskać masę związku z węzła 'A''B':

>>> d = g['A'] 
>>> d 
{"B": 20, 'D': 80, 'G' :90} 
>>> d['B'] 
20 
>>> g['A']['B'] 
20 

Korzystanie g['A'] dostaje nam wartość klucza w słowniku g. Możemy bezpośrednio działać na tę wartość, odwołując się do klucza 'B'.

1

Chyba to daje kilka pomysłów:

for dict in g: 
    print dict.get("B","") 

for dict in g: 
    print dict.keys() #or dict.values() 

for dict in g: 
    print dict["B"] 
Powiązane problemy