Python有一个有序字典。那么有没有有序集合呢?
正如其他人所说,OrderedDict
的功能是有序集合的超集,但如果你需要一个用于与API交互的集合,并且不需要它是可变的,那么 OrderedDict.keys()
实际上是实现了 abc.collections.Set
:
import random
from collections import OrderedDict, abc
a = list(range(0, 100))
random.shuffle(a)
# True
a == list(OrderedDict((i, 0) for i in a).keys())
# True
isinstance(OrderedDict().keys(), abc.Set)
需要注意的是,这种方法有不可变性,并且需要像字典一样建立集合,但它很简单,只使用了内置函数。
ParallelRegression包提供了一个setList()有序集合类,该类比基于ActiveState配方的选项更完整。它支持所有可用于列表的方法,如果不是全部,也支持大部分可用于集合的方法。
>>> import pandas as pd
>>> pd.unique([3, 1, 4, 5, 2, 2])
array([3, 1, 4, 5, 2])
if not new_item in my_list:
my_list.append(new_item)
>>> s = set([0, 1, 2, 99, 4, 40, 3, 20, 24, 100, 60])
>>> sorted(s)
[0, 1, 2, 3, 4, 20, 24, 40, 60, 99, 100]
如果您要重复使用此功能,则调用排序函数会产生开销,因此您可能希望保存结果列表,只要您完成了对集合的更改。如果您需要维护唯一元素并进行排序,我同意使用来自collections的OrderedDict和任意值(例如None)的建议。
collections.Counter
是 Python 中的一个“袋子”。 - flornquakedict
现在是按插入顺序排序的(自Python 3.7起保证)。 - Walter Tross