像frozenset这样维护插入顺序的数据结构?

时间:2021-02-12 18:49:41

标签: python set immutability standard-library

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

  • 可散列
  • 没有重复的元素
  • 维持秩序
  • 不可变
  • 可迭代
  • 标准库的一部分?想保持简单

发生了什么:

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

我需要什么:

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

我以为我可以使用frozenset但是集合和frozensets 重新排列元素。我认为这是为了更快的重复检查? 但无论如何我不能重新排序。

1 个答案:

答案 0 :(得分:1)

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

>>> 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) 时间。