当我需要保留一个要保持唯一的值的引用列表时,我使用set
(稍后,检查是否有in
的值)。这不适用于set
,因为它是不可散列的。
有quite a few techniques到dict
的“uniquify”alist
,但所有这些都假设我有一个最终的dict
,我想将其简化为唯一的元素。
如何以动态的方式做到这一点?对于一个list
元素,我只需要set
和元素,并且知道它只有在唯一的情况下才会被添加。这种(编辑:理想情况下,但不一定)内置机制是否适用于.add()
的包(我使用“包”一词是因为我不想将可能的答案限制在任何数据容器中)
最佳答案
您可以使用frozen dict这是常规dict的不可变实现。
这种方法应该允许您在集合内使用冻结的dict。
>>> 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