不可取的究竟是什么意思?
>>> a={1,2,3}
>>> b={4,5,6}
>>> set([a,b])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>>
任何人都可以告诉错误究竟是什么吗?我也可以在python中添加set到另一个集合吗?
答案 0 :(得分:3)
没有名为unhashable
的{{3}}属性的对象。 Python文档很好地描述了原因:
如果一个类定义了可变对象并实现了
__eq__()
方法,那么它不应该实现__hash__()
,因为hashable集合的实现要求键的哈希值是不可变的(如果对象的哈希值发生变化) ,它将在错误的哈希桶中。)
答案 1 :(得分:3)
正如Kasramvd所解释的那样,python中mutable
并实现__eq__
函数的对象是不可用的。
由于集合,列表和dicts是可变的(即可以更改它们;例如,您可以添加,删除所有项目),它们不能进行哈希处理。
由于无法使用一组集合,也许一组元组可能会起作用,但您需要执行额外的簿记(例如确保唯一值)才能实现您所描述的内容。
a = (1,2,3)
b = (4,5,6)
c = set([a,b])
甚至更好,一组frozensets
。与sets类似,但是不可变(你不能添加或删除它们中的元素)。
a = frozenset(a)
b = frozenset(b)
c = set([a,b])
答案 2 :(得分:0)
哈希函数是可用于映射数据的任何函数 任意大小的固定大小的数据。哈希返回的值 函数称为哈希值,哈希码,哈希值或简单 散列。
python中的字典只是一个哈希映射。
集合只能包含字符串或字符或数字,但不能包含dics或其他集合。 你可能想看看:https://docs.python.org/2/tutorial/datastructures.html#sets