str对象在BFS中没有attr键

时间:2013-12-03 00:50:52

标签: python python-2.7 dictionary breadth-first-search

我正在尝试使用我的数据集实现广度优先搜索功能。我的数据是一个填充字典并具有列表值的列表。我的数据的一个例子是:

a = [
   {'node1':['node2','node3','node5']},  
   {'node2':['node1','node8','node10']},
   {'node3':['node4','node2']},
   {'node4':['node2','node1','node3']},
   {'node5':['DEADEND']},
   {'node6':['GOAL']}
    ....
    ]

a将是我的graph输入,我的roota中的第一个节点,因此a[0]

我不确定我的BFS是否正确,但我正在测试中。我很快就要输出最短路径的路径。我想知道是否有人可以帮助我指出我的代码导致此错误的位置或我如何解决此问题感谢!

错误:

Traceback (most recent call last):
  File "test.py", line 72, in <module>
    BFS(a[0], a[0][0])
  File "test.py", line 60, in BFS
    node = t.keys()
AttributeError: 'str' object has no attribute 'keys'

我的BFS:

def BFS(graph, root):
    queue = []
    v = []  # set of vertices
    queue.append(root)
    while queue:
        t = queue.pop()
        node = t.keys()
        if t[node[0]][0] == 'GOAL':
            return t
        elif t[node[0]][0] == 'DEADEND':
            continue
        for edges in t[node[0]]:
            if edges not in v:
                v.append(edges)
                queue.append(edges)
    return None

1 个答案:

答案 0 :(得分:1)

您的错误来自queue.append(edges)。这是因为edges是当前节点连接的节点,即str。因此,当您在while循环中弹出queue时,最终会在str中找到queue,这会导致您看到的错误。

我认为您可以通过用以下内容替换该行来解决您的问题:

for d in graph:
    if edges in d.keys():
        queue.append(d)