Skip to main content

Python key functions for multi-field ordering

Project description

Python key functions for multi-field ordering in SQL ORDER BY fashion

https://img.shields.io/pypi/v/orderby.svg

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

orderby-0.0.2.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

orderby-0.0.2-py2.py3-none-any.whl (7.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file orderby-0.0.2.tar.gz.

File metadata

  • Download URL: orderby-0.0.2.tar.gz
  • Upload date:
  • Size: 4.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for orderby-0.0.2.tar.gz
Algorithm Hash digest
SHA256 26f5892356f79855c1369f47a17328b8dcbf7452e2459c1651c91929b8edbd6c
MD5 e43657cca7eca1756934153afe2aa2bc
BLAKE2b-256 9ccb2228287acb2c54d235359929a8b9885cc8aa94e7ecaaa2227a83e7eb04fa

See more details on using hashes here.

File details

Details for the file orderby-0.0.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for orderby-0.0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a6e712acc0539edbfe3b610963a171988a98aead226d262ccb4b924f642e8d53
MD5 84e0f32260d6ff52ccbdc4b8e37ced01
BLAKE2b-256 7def987515469ece2f6c85a06d73f3d725b065fe533073218d1d17875dcfb5e2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page