将集合添加到集合并制作嵌套集合

Add set to set and make nested sets

在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'

谁能告诉我我的错误在哪里以及我是如何实现目标的?

你不能拥有一组集合,因为集合是不可散列的对象;可以通过添加或删除项目来改变它们。

您需要使用一组 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})}
>>>

冰冻集在各个方面都和普通集一样,只是它们不能被改变。此功能使它们 hashable 并允许您将它们用作集合的项目或字典的键。

您的问题是集合只能包含 hashable 个对象,并且 set 不可散列。

对于外部集合的元素,您应该使用 frozenset 类型, 可散列。

In [3]: s = set([frozenset([1,2]), frozenset([3,4])])

In [4]: s
Out[4]: {frozenset({1, 2}), frozenset({3, 4})}