Python,TypeError:不可哈希类型:'list'

我在程序中收到以下错误:追溯:


Traceback (most recent call last):

File "C:\Python33\Archive\PythonGrafos\Alpha.py", line 126, in <module>

menugrafos()

File "C:\Python33\Archive\PythonGrafos\Alpha.py", line 97, in menugrafos

zetta = Beta.caminhografo(grafo,va,vb)

File "C:\Python33\Archive\PythonGrafos\Beta.py", line 129, in caminhografo

if ([vo, a]) in vat == ([vo,vq]) in vat:

TypeError: unhashable type: 'list'

该程序旨在做一个工作正常的邻接表,然后继续搜索顶点va和vb之间是否存在路径。我在collection / defaultdict中使用了列表字典,因此我可以正确地附加相邻的顶点。


问题出在程序末尾创建列表之后的if子句中。我找不到一种方法,可以将if子句与dict正确配合使用,以查找顶点之间是否存在有效路径。grafo也是一个图类。


这是代码:


class graph:

    v = 0

    a = 0

    node = []


class vertex:

    ta = []

    adj = {}


def caminhografo(grafo, va, vb):

    vat = defaultdict(list)

    i = 0

    a = 0

    z = 0

    vo = int(va)

    vq = int(vb)

    vz = int(va)

    vw = int(vb)

    x = len(grafo.node)

    if vz < vw:

        for vz in range (vw+1):

            a = 0

            x = len(grafo.node)

            for a in range (x):

                if [int(vz),int(a)] in grafo.node:

                    vat[vz].append(a)                   

    if vz > vw:

        while vz > vw:

            a = 0

            x = len(grafo.node)

            for a in range (x):

                if[int(va),int(a)] in grafo.node:

                    vat[vz].append(a)

            vz = vz - 1

    a = 0

    x = len(grafo.node)

    print(vat)

    for a in range (x):

       if ([vo, a]) in vat == ([vo,vq]) in vat:

           print("""

    ==============================================

               Existe Caminho

    ==============================================

    """)

           break

       elif ([vo,a]) in vat:

           vo = a

       else:           

           print("""

    ==============================================

             Não Existe Caminho

    ==============================================

        """)

           break

感谢您的协助。


慕姐4208626
浏览 689回答 1
1回答

哈士奇WWW

问题是您不能将a list用作键dict,因为dict键需要是不可变的。请改用元组。这是一个列表:[x, y]这是一个元组:(x, y)请注意,在大多数情况下,(and )是可选的,因为,它实际上定义了一个元组(只要它不被[]or 包围{},或用作函数参数)。您可能会发现Python教程中有关元组的部分非常有用:尽管元组看起来类似于列表,但是它们通常用于不同的情况和不同的目的。元组是不可变的,并且通常包含异类元素序列,这些元素可以通过拆包(请参阅本节后面的内容)或索引(甚至在namedtuple的情况下通过属性)进行访问。列表是可变的,并且它们的元素通常是同类的,并且可以通过遍历列表来访问。在字典部分中:与用数字范围索引的序列不同,字典是用键索引的,键可以是任何不可变的类型。字符串和数字始终可以是键。如果元组仅包含字符串,数字或元组,则它们可用作键。如果元组直接或间接包含任何可变对象,则不能将其用作键。您不能将列表用作键,因为可以使用索引分配,切片分配或诸如append()和extend()之类的方法在适当位置修改列表。如果您想知道错误消息的含义,那是在抱怨,因为没有针对列表的内置哈希函数(通过设计),并且字典实现为哈希表。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python