Ao percorrer um gráfico em Python, recebo este erro:
O objeto 'dict' não tem atributo 'has_key'
Aqui está o meu código:
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
O código visa encontrar os caminhos de um nó para outros. Fonte do código: http://cs.mwsu.edu/~terry/courses/4883/lectures/graphs.html
Por que estou recebendo esse erro e como posso corrigi-lo?
python
python-3.x
dictionary
Ashi
fonte
fonte
if not start in graph:
Respostas:
has_key
foi removido do Python 3. Da documentação :Aqui está um exemplo:
fonte
key not in d.keys()
é provavelmente muito mais lento também, já quekey not in d
deve ser O (1) lookup e acredito quekeys
produz uma lista, que é O (n) lookup (sem mencionar que ocupa espaço extra na memória). Posso estar errado sobre isso - ainda pode ser uma pesquisa hashd.keys()
é uma visão que implementa a maior parte da interface definida.in
é mais curto e pitônico, além de ser consistente com outras coleções do idioma.has_key tornou-se obsoleto no Python 3.0 . Alternativamente, você pode usar 'em'
fonte
Em python3,
has_key(key)
é substituído por__contains__(key)
Testado em python3.7:
fonte
Acho que é considerado "mais pitônico" apenas para usar
in
ao determinar se uma chave já existe, como emfonte
in
palavra - chave, sua intenção pode não ser clara o suficiente o queif start not in graph:
significa? pode sergraph
é uma lista e verifica se não existe tal string na lista? Por outro lado, se você usa sintaxe comohas_key
(agora obsoleta) ou pelo menosin graph.keys()
é mais claro quegraph
é umdict
Todo o código do documento será:
Depois de escrever, salve o documento e pressione F 5
Depois disso, o código que você executará no shell Python IDLE será:
find_path (gráfico, 'A', 'D')
A resposta que você deve receber no IDLE é
fonte
Experimentar:
Para obter mais informações, consulte ProgrammerSought
fonte