Created
August 16, 2016 11:16
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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