在Python中我想创建由集合组成的集合,因此我得到一组集合(嵌套集合)。
示例:
{{1,2}, {2,3}, {4,5}}
但是当我尝试以下内容时:
s = set()
s.add(set((1,2)))
我收到错误:
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
s.add(set((1,2)))
TypeError: unhashable type: 'set'
有谁能告诉我我的错误在哪里以及我如何实现目标?
答案 0 :(得分:7)
您的问题是,集合只能包含hashable个对象,并且set
不可以播放。
对于外部元素的元素,您应该使用 可以使用的frozenset
类型。
In [3]: s = set([frozenset([1,2]), frozenset([3,4])])
In [4]: s
Out[4]: {frozenset({1, 2}), frozenset({3, 4})}
答案 1 :(得分:3)
你不能拥有一组集合,因为集合是不可用的对象;它们可以通过添加或删除项目来进行变异。
您需要使用一组frozensets代替:
s = set()
s.add(frozenset((1,2)))
演示:
>>> s = set()
>>> s.add(frozenset((1,2)))
>>> s.add(frozenset((2,3)))
>>> s.add(frozenset((4,5)))
>>> s
{frozenset({1, 2}), frozenset({2, 3}), frozenset({4, 5})}
>>>
Frozensets在各个方面都像普通套装,除了它们不能被变异。此功能使它们成为hashable,并允许您将它们用作字典集或键的项目。