在我的dict中添加键会产生不可用的类型:' list'

时间:2015-12-17 23:16:49

标签: python-3.x

我正在尝试编码BFS算法但我收到此错误"不可用的类型:' list'"这是我无法处理的。你能帮忙吗?

mygraph = { "1": ["2", "4"], "2": ["3", "5"], "3": ["6"],
            "4": ["5","7"], "5": ["8"], "6": ["9"], "7": ["8"], "8": ["9"]}

level = {"1":None}
parent = {"1":None}
i = 1
frontier = ["1"]

while frontier:
    nex = []
    adj = []
    for u in frontier:
        adj.append (mygraph.get (u))
        for v in adj:
            if v not in level:
                level [v] = i
                parent [v] = u
                nex.extend (v)
    frontier = nex
    i += 1

1 个答案:

答案 0 :(得分:0)

目前v是顶点列表,而不是单个顶点。当您尝试将其用作字典键时,这会导致错误。以这种方式使用它是一个错误。您的词典应该是从单个顶点(如"1")映射到其他内容,但是当您从v获取adj值时,您将使用错误的值作为键列表。

我认为您根本不需要维护adj列表。您只想在u邻接列表的成员上循环一次,然后获取frontier中下一个顶点的相邻顶点的新列表。

所以,而不是:

adj.append (mygraph.get (u))
for v in adj:

只是做:

for v in mygraph.get(u):

(并丢弃不再需要的adj变量。)

请注意,如果您的图表不完整,也就是说,有些顶点没有外边缘,您可能需要将get调用更改为mygraph.get(u, []),以便它始终返回某些内容可迭代。