'dict' object has no attribute 'has_key'

后端 未结 6 976
太阳男子
太阳男子 2021-01-30 03:46

While traversing a graph in Python, a I\'m receiving this error:

\'dict\' object has no attribute \'has_key\'

Here is my code:

相关标签:
6条回答
  • 2021-01-30 04:01

    Try:

    if start not in graph:
    

    For more info see ProgrammerSought

    0 讨论(0)
  • 2021-01-30 04:07

    In python3, has_key(key) is replaced by __contains__(key)

    Tested in python3.7:

    a = {'a':1, 'b':2, 'c':3}
    print(a.__contains__('a'))
    
    0 讨论(0)
  • 2021-01-30 04:08

    I think it is considered "more pythonic" to just use in when determining if a key already exists, as in

    if start not in graph:
        return None
    
    0 讨论(0)
  • 2021-01-30 04:18

    has_key has been deprecated in Python 3.0. Alternatively you can use 'in'

    graph={'A':['B','C'],
       'B':['C','D']}
    
    print('A' in graph)
    >> True
    
    print('E' in graph)
    >> False
    
    0 讨论(0)
  • 2021-01-30 04:21

    has_key was removed in Python 3. From the documentation:

    • Removed dict.has_key() – use the in operator instead.

    Here's an example:

    if start not in graph:
        return None
    
    0 讨论(0)
  • 2021-01-30 04:25

    The whole code in the document will be:

    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
    

    After writing it, save the document and press F 5

    After that, the code you will run in the Python IDLE shell will be:

    find_path(graph, 'A','D')

    The answer you should receive in IDLE is

    ['A', 'B', 'C', 'D'] 
    
    0 讨论(0)
提交回复
热议问题