#!/usr/bin/env python3 from operator import itemgetter import json items = [ { 'url': 'http://aaa/', 'user': 'xxx', 'quota': 100, }, { 'url': 'http://aaa/', 'user': 'yyy', 'quota': 200, }, { 'url': 'http://bbb/', 'user': 'xxx', 'quota': 100, }, { 'url': 'http://bbb/', 'user': 'yyy', 'quota': 200, }, ] keyspec = [ (itemgetter('url'), False), (itemgetter('user'), True), ] def keygen(ks): class _: def __init__(self, v): self.v = v def __eq__(self, o): return o.v == self.v def __lt__(self, o): return o.v < self.v return lambda x: [ _(k(x)) if r else k(x) for k, r in ks ] items.sort(key=keygen(keyspec)) print(json.dumps(items, indent=4))