Immer KeyError : 3
Immer KeyError: 3, wenn Sie versuchen, um die folgenden zu finden, die topologische Sortierung:
def dfs_topsort(graph): # recursive dfs with
L = [] # additional list for order of nodes
color = { u : "white" for u in graph }
found_cycle = [False]
for u in graph:
if color[u] == "white":
dfs_visited(graph, u, color, L, found_cycle)
if found_cycle[0]:
break
if found_cycle[0]: # if there is a cycle,
L = [] # then return an empty list
L.reverse() # reverse the list
return L # L contains the topological sort
def dfs_visited(graph, u, color, L, found_cycle):
if found_cycle[0]:
return
color[u] = "gray"
for v in graph[u]:
if color[v] == "gray":
found_cycle[0] = True
return
if color[v] == "white":
dfs_visited(graph, v, color, L, found_cycle)
color[u] = "black" # when we're done with u,
L.append(u)
graph_tasks = {1: [2,11],
2: [3],
11: [12],
12: [13]
}
order = dfs_topsort(graph_tasks)
for task in order:
print(task)
Ich bin immer KeyError: 3 für das obige Beispiel. Warum ist das so? Wie kann es behoben werden?
InformationsquelleAutor Angad | 2016-10-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, dass die
dfs_topsort
Algorithmus braucht einekey
für jedenvalue
existiert im graph.Also müssen wir zählen die Tasten für die einzelnen Werte. Die erste, die fehlt, ist
3
, was verursacht dieKeyError: 3
, und auch13
. Wenn wir diese Tasten, und geben Sie leere Werte (weil Sie keinen Kontakt zu anderen Knoten) behebt dann die Fehler.Auch das andere Beispiel, das Sie Gaben in den Kommentar funktioniert, weil jeder Wert (Rechte Seite) (
[2,3], [4, 5, 6], [4, 6], [5, 6], [6], []
) ist auch in der Schlüssel-Werte (linke Seite) [1, 2, 3, 4, 5, 6
].Also mit
graph_tasks = { 1: [2, 11], 2: [3], 3: [], 11: [12], 12: [13], 13: [] }
gibt die Ausgabe, die Sie eventuell erwarten.Ich hoffe das hilft dir.
Ich denke, Sie müssen die gleiche Logik wie bei
dfs_topsort
Funktion: ändern Siefor u in graph:
zufor u in graph.iterkeys():
. Auch, es gibtNone
nichtnull
, und nach Ihren Kommentaren im code, "wenn es einen Zyklus, dann eine leere Liste zurück", so sollte dies nicht Wahr sein, und es gibtNone
?Nein, wenn ich dieses Beispiel verwenden: Graphen = { 1: [2, 3], 2: [4, 5, 6], 3: [4,6], 4: [5,6], 5: [6], 6: [] }, was ich Tat, gibt die korrekte Ausgabe. Selbst nachdem es geändert, graph.iterkey() in dfs_topsort, es gibt nichts zurück.
Sorry, ich bin nicht sicher über die Probleme, die Sie versuchen zu lösen,, ich dachte, Sie wollte nur fix die KeyError..
Es sieht aus wie Sie suchen ein graph von Integer-zahlen und auf der Suche nach einer passenden Schnur? Was natürlich nicht funktionieren. Sind Sie versuchen, zu ändern, dieses code-tutorial zur Arbeit mit Listen von ganzen zahlen?
InformationsquelleAutor davedwards