Python key functions for multi-field ordering
Project description
Python key functions for multi-field ordering in SQL ORDER BY fashion
Meant to be used with built-in sorted() key function.
Supports also list.sort() doing in-place sorting.
Implementation uses operator.itemgetter() + some internal helper classes to allow descending sorting order.
So far this is tested and used on lists of dictionaries. Adding support for named tuples and others would be possible (using operator.attrgetter()).
Usage
SQL-like: orderby('foo ASC, bar DESC')
chained: asc('foo').desc('bar') usage
multiple fields at once: asc('foo', 'bar')
Examples
orderby() string syntax:
>>> from orderby import orderby
>>> import json
>>> files = [
... {'size': 1234, 'path': 'foo/bar.txt'},
... {'size': 0, 'path': '/dev/null'},
... {'size': 1234, 'path': 'foo/abc.bin'},
... ]
>>> print(json.dumps(sorted(files, key=orderby('size DESC, path')), indent=2))
[
{
"size": 1234,
"path": "foo/abc.bin"
},
{
"size": 1234,
"path": "foo/bar.txt"
},
{
"size": 0,
"path": "/dev/null"
}
]
Chained asc() and desc() usage:
>>> from orderby import asc, desc
>>> print(json.dumps(sorted(files, key=desc('size').asc('path')), indent=2))
[
{
"size": 1234,
"path": "foo/abc.bin"
},
{
"size": 1234,
"path": "foo/bar.txt"
},
{
"size": 0,
"path": "/dev/null"
}
]
In-place sorting of a list:
>>> files.sort(key=desc('path'))
>>> print(json.dumps(files, indent=2))
[
{
"size": 1234,
"path": "foo/bar.txt"
},
{
"size": 1234,
"path": "foo/abc.bin"
},
{
"size": 0,
"path": "/dev/null"
}
]
>>> files.sort(key=desc('size').asc('path'))
>>> print(json.dumps(files, indent=2))
[
{
"size": 1234,
"path": "foo/abc.bin"
},
{
"size": 1234,
"path": "foo/bar.txt"
},
{
"size": 0,
"path": "/dev/null"
}
]
Internals
To be explained here later…
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for orderby-0.0.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a6e712acc0539edbfe3b610963a171988a98aead226d262ccb4b924f642e8d53 |
|
MD5 | 84e0f32260d6ff52ccbdc4b8e37ced01 |
|
BLAKE2b-256 | 7def987515469ece2f6c85a06d73f3d725b065fe533073218d1d17875dcfb5e2 |