Skip to main content

Travis Codecov Pypi

An OrderedSet is a custom MutableSet that remembers its order, so that every entry has an index that can be looked up.

Usage examples

An OrderedSet is created and used like a set:

>>> from ordered_set import OrderedSet

>>> letters = OrderedSet('abracadabra')

>>> letters
OrderedSet(['a', 'b', 'r', 'c', 'd'])

>>> 'r' in letters
True

It is efficient to find the index of an entry in an OrderedSet, or find an entry by its index. To help with this use case, the .add() method returns the index of the added item, whether it was already in the set or not.

>>> letters.index('r')
2

>>> letters[2]
'r'

>>> letters.add('r')
2

>>> letters.add('x')
5

OrderedSets implement the union (|), intersection (&), and difference (-) operators like sets do.

>>> letters |= OrderedSet('shazam')

>>> letters
OrderedSet(['a', 'b', 'r', 'c', 'd', 'x', 's', 'h', 'z', 'm'])

>>> letters & set('aeiou')
OrderedSet(['a'])

>>> letters -= 'abcd'

>>> letters
OrderedSet(['r', 'x', 's', 'h', 'z', 'm'])

The __getitem__() and index() methods have been extended to accept any iterable except a string, to perform NumPy-like "fancy indexing".

>>> letters = OrderedSet('abracadabra')

>>> letters[[0, 2, 3]]
OrderedSet(['a', 'r', 'c'])

>>> letters.index(['a', 'r', 'c'])
[0, 2, 3]

This combination of features makes OrderedSet a simple implementation of many of the things that pandas.Index is used for. An OrderedSet can be used as a bi-directional mapping between a sparse vocabulary and dense index numbers.

OrderedSet implements __getstate__ and __setstate__ so it can be pickled, and implements the abstract base classes collections.MutableSet and collections.Sequence.

Authors

OrderedSet was implemented by Rob Speer. Jon Crall contributed changes and tests to make it fit the Python set API.

Comparisons

The original implementation of OrderedSet was a recipe posted to ActiveState Recipes by Raymond Hettiger, released under the MIT license.

Hettiger's implementation kept its content in a doubly-linked list referenced by a dict. As a result, looking up an item by its index was an O(N) operation, while deletion was O(1).

This version makes different trade-offs for the sake of efficient lookups. Its content is a standard Python list instead of a doubly-linked list. This provides O(1) lookups by index at the expense of O(N) deletion, as well as slightly faster iteration.

If you were to use a Python dict as an OrderedSet by ignoring its values, its lookups and deletions would be similar to Hettiger's implementation, with iteration speed similar to this implementation.

Compatibility

OrderedSet is automatically tested on Python 2.7, 3.3, 3.4, 3.5, 3.6, and 3.7. We've checked more informally that it works on PyPy and PyPy3.

Metadata

Release files for ordered-set 3.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ordered-set 3.0.2
File Size Uploaded
ordered-set-3.0.2.tar.gz 9.1 kB Details

Release files / ordered-set-3.0.2.tar.gz

Download URL ordered-set-3.0.2.tar.gz
Size 9.1 kB
Tags Source
SHA-256 checksum
How to use checksums
7d292b866fa44f339ac6e624e3d338accfb415ce0a8431595d51990fbdf61d3b
BLAKE2b-256 checksum
How to use checksums
c3ddabe09fe9b0022ce5a37489c5c237cf7d50ae2e8807691b03321e7062f816
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.6.5

Release history Release notifications | RSS feed

4.1.0

2 release files

4.0.2

1 release file

4.0.1

1 release file

3.1.1

1 release file

3.1

2 release files

This release

3.0.2 This release

1 release file

3.0.1

1 release file

3.0.0

1 release file

2.0.2

1 release file

2.0.1

1 release file

2.0.0

1 release file

1.4.0

1 release file

1.3.1

1 release file

1.3

1 release file

1.2

1 release file

1.1

1 release file

1.0.1

1 release file

1.0

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page