添加set以设置和创建嵌套集

时间:2015-01-17 20:30:51

标签: python set nested

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

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

2 个答案:

答案 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,并允许您将它们用作字典集或键的项目。