On Thu, 11 Jun 2009 18:54:56 -0700 (PDT)
Oni <dren...@gmail.com> wrote:

> Managed to get a dictionary to sort on multiple columns using a tuple
> to set the sort order (see below). However how can I control that
> column "date" orders descending and the column "name" orders
> ascending.
...
> bob = entries
> bob.sort(key=operator.itemgetter(*sortorderarr),reverse=True)
> pp.pprint(bob)

Note that this accomplishes nothing, since bob and entries are the same
object, so entries.sort and bob.sort are the same method of the same
object.
You can use "copy" module to clone list and it's contents (dict objects)
or just use list constructor to clone list structure only, leaving
contents essencially the same, but in different order.
Or, in this case, you can just use "sorted" function which constructs
sorted list from any iterable.


As for the question, in addition to Mark's suggestion of doing
sub-sorting, you can also construct complex index (code below).
Dunno which would be more efficient in the particular case...

  import datetime
  import pprint

  entries = [{'name': 'ZZ2', 'username': 'ZZ3', 'date':
    datetime.datetime (2008, 9, 30, 16, 43, 54)},{'name': 'ZZ2',
    'username': 'ZZ5','date': datetime.datetime(2008, 9, 30, 16, 43,
    54)},{'name': 'ZZ2', 'username': 'ZZ1', 'date':
    datetime.datetime(2007, 9, 30, 16, 43, 54)}, {'name': 'AA2',
    'username': 'AA2','date': datetime.datetime(2007, 9, 30, 16, 43,
    54)}]

  entries.sort(lambda x: (x['name'], -time.mktime(x['date'].timetuple())))

Here time is inversed, yielding reverse sort order by that column.

-- 
Mike Kazantsev // fraggod.net

Attachment: signature.asc
Description: PGP signature

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to