当我需要保留我想保持唯一的值的引用列表时,我使用set
(稍后检查in
set
是dict
。这不适用于list
,因为它不可用。
有quite a few techniques到" unquify"一个dict
list
,但所有人都认为我有一个set
,我希望将其缩减为唯一元素。
如何以动态方式做到这一点?对于.add()
我只会dict
和元素,并且知道只有在它是唯一的时候才会添加它。是这样的(编辑:理想但不一定)内置机制可用于DataGrid
包(我使用" bag"因为我不想限制任何可能的答案数据容器)
答案 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