Beim Durchlaufen eines Diagramms in Python wird folgende Fehlermeldung angezeigt:
Das Objekt 'dict' hat kein Attribut 'has_key'.
Hier ist mein Code:
def find_path(graph, start, end, path=[]):
path = path + [start]
if start == end:
return path
if not graph.has_key(start):
return None
for node in graph[start]:
if node not in path:
newpath = find_path(graph, node, end, path)
if newpath: return newpath
return None
Der Code zielt darauf ab, die Pfade von einem Knoten zu anderen zu finden. Codequelle: http://cs.mwsu.edu/~terry/courses/4883/lectures/graphs.html
Warum erhalte ich diesen Fehler und wie kann ich ihn beheben?
python
python-3.x
dictionary
Ashi
quelle
quelle
if not start in graph:
Antworten:
has_key
wurde in Python 3 entfernt. Aus der Dokumentation :Hier ist ein Beispiel:
quelle
key not in d.keys()
ist wahrscheinlich auch viel langsamer, da eskey not in d
sich um eine O (1) -Suche handeln sollte, und ich glaube, dasskeys
eine Liste erstellt wird, bei der es sich um eine O (n) -Suche handelt (ganz zu schweigen davon, dass zusätzlicher Speicherplatz benötigt wird). Ich könnte mich jedoch irren - es könnte immer noch eine Hash-Suche seind.keys()
ist eine Ansicht, die den größten Teil der festgelegten Schnittstelle implementiert.in
ist kürzer und pythonischer und stimmt mit anderen Sammlungen in der Sprache überein.has_key ist in Python 3.0 veraltet . Alternativ können Sie 'in' verwenden.
quelle
In Python3
has_key(key)
wird durch ersetzt__contains__(key)
In Python3.7 getestet:
quelle
Ich denke, es wird als "pythonischer" angesehen,
in
wenn nur festgestellt wird, ob bereits ein Schlüssel vorhanden ist, wie inquelle
in
Schlüsselwort verwenden, ist Ihre Absicht möglicherweise nicht klar genug, wasif start not in graph:
bedeutet das? Möglicherweise handelt es sichgraph
um eine Liste, die prüft, ob die Liste keine solche Zeichenfolge enthält. Auf der anderen Seite, wenn Sie Syntax wiehas_key
(jetzt veraltet) verwenden oder zumindestin graph.keys()
ist es klarer, dassgraph
eindict
Der gesamte Code im Dokument lautet:
Speichern Sie das Dokument nach dem Schreiben und drücken Sie F 5
Danach lautet der Code, den Sie in der Python IDLE-Shell ausführen:
find_path (Grafik, 'A', 'D')
Die Antwort, die Sie in IDLE erhalten sollten, lautet
quelle
Versuchen:
Weitere Informationen finden Sie unter ProgrammerSought
quelle