https://github.com/valentinstn/natsort-rs
A blazing fast natural sorting library for Python written in Rust
https://github.com/valentinstn/natsort-rs
performance python rust sorting
Last synced: 5 days ago
JSON representation
A blazing fast natural sorting library for Python written in Rust
- Host: GitHub
- URL: https://github.com/valentinstn/natsort-rs
- Owner: valentinstn
- License: mit
- Created: 2023-09-16T09:51:23.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2026-05-15T23:16:09.000Z (about 1 month ago)
- Last Synced: 2026-05-16T00:56:52.544Z (about 1 month ago)
- Topics: performance, python, rust, sorting
- Language: Python
- Homepage:
- Size: 104 KB
- Stars: 11
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-python-rs - natsort-rs - Fast natural sorting library, 5-45x faster than alternatives. (Sorting)
README
natsort-rs
🚀 A blazing fast natural sorting library for Python written in Rust 🦀
## Installation
```
pip install natsort-rs
```
## Usage
```py
from natsort_rs import natsort
```
### Sort a list of strings
```py
items = ['item 1', 'item 10', 'item 3']
print(natsort(items))
# ['item 1', 'item 3', 'item 10']
```
### Sort case insensitively
```py
items = ['Item 1', 'Item 3', 'item 2']
print(natsort(items, ignore_case=True))
# ['Item 1', 'item 2', 'Item 3']
```
### Sort complex objects based on property
```py
items = [
{'name': 'item 1', 'id': 1},
{'name': 'item 3', 'id': 3},
{'name': 'item 2', 'id': 2}
]
print(natsort(items, key=lambda d: d['name']))
# [{'name': 'item 1', 'id': 1}, {'name': 'item 2', 'id': 2}, {'name': 'item 3', 'id': 3}]
```
### Type-safe sorting
The return type is inferred based on the input list type, so no casting is needed:
```py
items: list[str] = ['item 1', 'item 10', 'item 3']
result = natsort(items)
# result is list[str]
items_int: list[int] = [10, 3, 1]
result_int = natsort(items_int)
# result_int is list[int]
```
### Return the sorting indices
This can be helpful if you only want to get the sorted indices returned, that makes the performance-critical part
useful for custom sorting use cases:
```py
items = ['item 1', 'item 10', 'item 3']
print(natsort(items, return_indices=True))
# [0, 2, 1]
```
## Benchmark
| No. of items | Duration natsort [s] | Duration natsort-rs [s] | Relative speedup |
|-----|-----|-----|-----|
| 10 | 0.00006 | 0.00000 | 16.8 |
| 100 | 0.00094 | 0.00002 | 44.3 |
| 1000 | 0.00281 | 0.00022 | 12.7 |
| 10000 | 0.02835 | 0.00262 | 10.8 |
| 100000 | 0.29712 | 0.03334 | 8.9 |
| 1000000 | 3.31207 | 0.45333 | 7.3 |
Execute `benchmark.py` to reproduce the results.
## Development
### Local build
To build and test the package locally using `uv`:
```bash
uv run maturin develop --release
```
### Running benchmarks
To run benchmarks:
```bash
uv run benchmark.py
```
This will compare the performance of `natsort-rs` against the pure Python `natsort` library and display results in a table format.
### Run tests
```bash
uv run -m unittest discover tests
```
## Credits
This Python module is build on top of the [`natord`](https://docs.rs/natord/latest/natord/) crate and inspired by [`natsort`](https://pypi.org/project/natsort/).
## License
MIT License