Pythonでグラフを走査しているときに、次のエラーが表示されます。
'dict'オブジェクトには属性 'has_key'がありません
ここに私のコードがあります:
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
コードは、あるノードから他のノードへのパスを見つけることを目的としています。コードソース: http://cs.mwsu.edu/~terry/courses/4883/lectures/graphs.html
なぜこのエラーが発生するのですか?どうすれば修正できますか?
has_key
はPythonで削除されました3. ドキュメント から:
dict.has_key()
を削除しました–代わりにin
演算子を使用してください。
以下に例を示します。
if start not in graph:
return None
has_keyはPython 3.で非推奨になりました。あるいは、'in'を使用できます
graph={'A':['B','C'],
'B':['C','D']}
print('A' in graph)
>> True
print('E' in graph)
>> False
次のように、キーが既に存在するかどうかを判断するときにin
を使用することは「よりPythonic」と見なされると思います
if start not in graph:
return None
ドキュメント内のコード全体は次のようになります。
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
書いたら、ドキュメントを保存してF 5を押します
その後、Python IDLEシェルで実行するコードは次のようになります。
find_path(graph、 'A'、 'D')
IDLEで受け取るべき答えは
['A', 'B', 'C', 'D']
Python3では、has_key(key)
は__contains__(key)
に置き換えられます
Python3.7でテスト済み:
a = {'a':1, 'b':2, 'c':3}
print(a.__contains__('a'))