如何保持独特的口袋?

时间:2017-03-17 13:32:53

标签: python python-3.x dictionary set

当我需要保留我想保持唯一的值的引用列表时,我使用set(稍后检查in setdict。这不适用于list,因为它不可用。

quite a few techniques到" unquify"一个dict list,但所有人都认为我有一个set,我希望将其缩减为唯一元素。

如何以动态方式做到这一点?对于.add()我只会dict和元素,并且知道只有在它是唯一的时候才会添加它。是这样的(编辑:理想但不一定)内置机制可用于DataGrid包(我使用" bag"因为我不想限制任何可能的答案数据容器)

3 个答案:

答案 0 :(得分:1)

  

使用词典实现集合类。因此,   set元素的要求与字典的要求相同   键;即,该元素定义 eq ()和哈希()。   因此,集合不能包含可变元素,如列表或   字典。但是,它们可以包含不可变的集合,例如   元组或ImmutableSet的实例。

因此,如果您只想使用内置函数,则可以在将字典输入集合时将字典转换为元组元组,并在需要使用它们时将它们转换回字典。

dict_set = set()
dict_set.add(tuple(a_dict.items()))

答案 1 :(得分:1)

您可以使用frozen dict,它是常规字典的不可变实现。

这种方法应该允许你在集合中使用冻结的dicts。

>>> from frozendict import frozendict
>>> x = [frozendict({'a':2, 'b':3}),frozendict({'b':3, 'a':2})]
>>> set(x)
{<frozendict {'b': 3, 'a': 2}>}
>>> frozendict({'b': 3, 'a': 2}) in set(x)
True
>>> frozendict({'b': 4, 'a': 2}) in set(x)
False
>>> frozendict({'a': 2, 'b': 3}) in set(x)
True

答案 2 :(得分:0)

  

对于一个集合,我只是.add()和元素,并且知道只有在它是唯一的时候才会添加它。

而不是add(),请将update()|=与字典的项目一起使用。这将满足您动态和增量添加的目标,同时“知道只有在它是唯一的时候才会添加它。”:

>>> d = dict(raymond='red')
>>> e = dict(raymond='blue')
>>> f = dict(raymond='red')

>>> s = set()
>>> s |= d.items()
>>> s |= e.items()
>>> s |= f.items()
>>> s