https://github.com/techcable/orderedset.py
A simple ordered set type for python.
https://github.com/techcable/orderedset.py
collections modern-python ordered-set python set
Last synced: 7 months ago
JSON representation
A simple ordered set type for python.
- Host: GitHub
- URL: https://github.com/techcable/orderedset.py
- Owner: Techcable
- License: apache-2.0
- Created: 2025-03-10T23:35:53.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2025-06-22T02:23:44.000Z (8 months ago)
- Last Synced: 2025-07-03T03:42:08.189Z (8 months ago)
- Topics: collections, modern-python, ordered-set, python, set
- Language: Python
- Homepage:
- Size: 62.5 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE.txt
Awesome Lists containing this project
README
techcable.orderedset
===================
[](https://github.com/Techcable/orderedset.py)
[](https://pypi.org/project/techcable.orderedset/)
]
A simple and efficient `OrderedSet` in pure python. Implements both [`MutableSet`] and [`Sequence`].
[`MutableSet`]: https://docs.python.org/3/library/collections.abc.html#collections.abc.MutableSet
[`Sequence`]: https://docs.python.org/3/library/collections.abc.html#collections.abc.Sequence
## Example Usage
```python
from techcable.orderedset import OrderedSet
# prints {1, 2, 7, 3}
print(OrderedSet([1, 2, 7, 2, 3]))
# Implements all standard set methods, still preserves order
print(OrderedSet.of[1,2]) | OrderedSet([3,2,4])) # {1,2,3,4}
# OrderedSet.of(1, 2) is shorthand for OrderedSet([1, 2]),
# avoiding an extra pair of brackets
print(OrderedSet.of(1, 2)) # {1, 2}
# Implements `append` method, returning True on success
# and False if the item was a duplicate
oset = OrderedSet()
oset.append(1) # True
oset.append(2) # True
oset.append(1) # False - already in set, did nothing
oset.extend([2,3]) # True - at least one success
oset.append([2,3]) # False - all duplicates
```
Supports [pydantic](pydantic.org) validation & serialization:
```python
import pydantic
from techcable.orderedset import OrderedSet
model = pydantic.TypeAdapter(OrderedSet[int])
# prints OrderedSet.of(1,2,7,8)
print(repr(model.validate_python([1,2,7,8])))
assert model.dump_python(OrderedSet.of(1,2,7,8)) == [1,2,7,8]
```
## Potential Future Features
- Implement `OrderedFrozenSet`
- Consider [acceleration module] using C/Rust/Cython
- Probably unnecessary since this has library has very little overhead compared to the builtin `set`/`list`
[acceleration module]: https://peps.python.org/pep-0399/
## License
Licensed under either the [Apache 2.0 License](./LICENSE-APACHE.txt) or [MIT License](./LICENSE-MIT.txt) at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.