gpt4 book ai didi

Python 不可散列类型 : 'OrderedDict'

转载 作者:太空狗 更新时间:2023-10-30 00:45:40 27 4
gpt4 key购买 nike

我对以下概念一点都不陌生:

TypeError: unhashable type: 'OrderedDict'

但我无法理解下面的代码行如何产生这样的堆栈跟踪。

89:     @staticmethod
90: def diff(var1, var2, path=[], level=0, curpath=[]):
...
101: elif isinstance(var1, list) and isinstance(var2, list):
102: l1s = set(var1)
103: l2s = set(var2)
104: retlist = []

File "myFile.py", line 102, in diff
l1s = set(var1)
TypeError: unhashable type: 'OrderedDict'

上面代码中的102行怎么会抛出这样的异常呢?

最佳答案

一些数据结构(最著名的是 dictset)需要它们包含的对象(字典中的键,集合中的项)来实现__hash__() 魔术方法,以便调用 hash(obj) 返回一个值。

这是优化结构所必需的,并且与不变性一起帮助保证所包含对象的唯一性。

在您的情况下,var1 包含一些不可散列 的对象(它不实现hash())。此对象是一个 OrderedDict,它是一个可变对象,在设计上不可散列。

作为另一个对象类型的例子,它是可变的,并且在设计上不可散列,请考虑 list 和这个例子:

>>> L = [1, 2, 3]
>>> set([L])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> hash(L)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

如果您使用 set() 来确保唯一性,那么您必须采取其他方式,尽管您的问题并不清楚。

关于Python 不可散列类型 : 'OrderedDict' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15880765/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com