数据结构像frozenset保持插入顺序?



我需要具有这些属性的类集合数据结构:

  • hashable
  • 没有重复元素
  • 维持秩序
  • iterable
  • 是标准库的一部分吗?要保持简单

发生了什么:

frozenset([3,1,2,2,3]) -> frozenset(1,2,3)

我需要什么:

frozenset*([3,1,2,2,3]) -> frozenset*(3,1,2)

我想我可以使用frozenset,但是同时使用set和frozenset重新排序的元素。我想这是为了更快地重复核对吧?但无论如何我不能重新排序。

从Python 3.7开始,字典不再对元素重新排序,而是保证保持插入顺序。您可以使用字典,其中键是您的集合项,值被忽略。

>>> dict.fromkeys([3,1,2,2,3])
{3: None, 1: None, 2: None}

字典不会被冻结,所以如果这很重要,那么你可以先把所有的项放入字典中,然后根据键构建一个元组。

>>> tuple(dict.fromkeys([3,1,2,2,3]).keys())
(3, 1, 2)

这将非常接近frozenset。主要的区别在于,检查一个元素是否在元组中需要O(n)而不是O(1)时间。

标准库中没有这样的实现

最新更新