Skip to content

Instantly share code, notes, and snippets.

@kezabelle
Created August 16, 2016 11:16
Show Gist options
  • Save kezabelle/63b2520a935455115dfe8faefe93a5f7 to your computer and use it in GitHub Desktop.
Save kezabelle/63b2520a935455115dfe8faefe93a5f7 to your computer and use it in GitHub Desktop.
Maybe approximate doing order_by("thing", "-otherthing", "thing2") in Django, but for python things. Originally piqued my interest because of bmispelon on #django IRC
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import
from pprint import pprint
from operator import itemgetter
from copy import deepcopy
import sys
"""
Wheeee:
python sorto.py "age" "gender"
python sorto.py "-age" "name"
python sorto.py "-age" "-name"
python sorto.py "name" "-age"
"""
users = [
{
"is_active": True,
"age": 35,
"eye_color": "brown",
"name": "Bernard",
"gender": "male",
"email": "[email protected]",
},
{
"is_active": True,
"age": 34,
"eye_color": "brown",
"name": "Manny",
"gender": "male",
"email": "[email protected]",
},
{
"is_active": True,
"age": 35,
"eye_color": "brown",
"name": "Fran",
"gender": "female",
"email": "[email protected]",
},
# And so on ...
]
def prepare_sort(inputs):
return tuple({'key': itemgetter(x.lstrip('-')),
'reverse': x.startswith('-')}
for x in reversed(inputs))
by = sys.argv[1:]
keys = prepare_sort(by)
pprint(by)
def dosort(data, sorting):
newdata = deepcopy(data)
for sorter in sorting:
newdata.sort(**sorter)
return newdata
pprint(dosort(users, keys))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment