En parcourant un graphique en Python, je reçois cette erreur:
L'objet 'dict' n'a pas d'attribut 'has_key'
Voici mon 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
Le code vise à trouver les chemins d'un nœud à d'autres. Source du code: http://cs.mwsu.edu/~terry/courses/4883/lectures/graphs.html
Pourquoi ai-je cette erreur et comment puis-je la réparer?
has_key
a été supprimé de Python 3. Du documentation :
- Supprimé
dict.has_key()
- utilisez plutôt l'opérateurin
.
Voici un exemple:
if start not in graph:
return None
has_key est obsolète en Python 3.. Sinon, vous pouvez utiliser 'in'
graph={'A':['B','C'],
'B':['C','D']}
print('A' in graph)
>> True
print('E' in graph)
>> False
Je pense qu’il est considéré comme "plus Pythonique" de simplement utiliser in
pour déterminer si une clé existe déjà, comme dans
if start not in graph:
return None
Le code entier dans le document sera:
graph = {'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']}
def find_path(graph, start, end, path=[]):
path = path + [start]
if start == end:
return path
if start not in graph:
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
Après l’avoir écrit, sauvegardez le document et appuyez sur F 5
Après cela, le code que vous exécuterez dans le shell Python IDLE sera:
find_path (graphique, 'A', 'D')
La réponse que vous devriez recevoir dans IDLE est
['A', 'B', 'C', 'D']
En python3, has_key(key)
est remplacé par __contains__(key)
Testé en python3.7:
a = {'a':1, 'b':2, 'c':3}
print(a.__contains__('a'))