Подтвердить что ты не робот

Объект 'dict' не имеет атрибута 'has_key'

При перемещении графика в 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

Код предназначен для поиска путей от одного node к другим. Источник кода: http://cs.mwsu.edu/~terry/courses/4883/lectures/graphs.html

Почему я получаю эту ошибку и как ее исправить?

4b9b3361

Ответ 1

has_key был удален в Python 3. Из документация:

  • Удалено dict.has_key() - вместо этого используйте in.

Вот пример:

if start not in graph:
    return None

Ответ 2

Я считаю, что более "pythonic" просто использует in при определении того, существует ли ключ, как в

if start not in graph:
    return None

Ответ 3

Весь код в документе будет:

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

После этого код, который вы запускаете в оболочке IDLE Python, будет выглядеть следующим образом:

find_path (граф, 'A', 'D')

Ответ, который вы должны получить в IDLE,

['A', 'B', 'C', 'D']