Should I use a dictionary?

John Roth johnroth at
Tue Jun 26 17:08:57 CEST 2001

"Remco Gerlich" <scarblac at> wrote in message
news:slrn9jgd4o.n2o.scarblac at
> Gustaf Liljegren <gustafl at> wrote in comp.lang.python:
> > I have an object type for e-mail messages based on the rfc822 module.
> > picking out some messages from several sources, I want to sort them in
> > order of the date property of the message object (as far as I
> > everything in this process needs to be kept in memory). Anyway, the
> > is that I need some hints about how to sort the messages, as they are
> > sorted in way I get them.
> >
> > One idea I came up with was to put the date property of the message
> > as a key in a dictionary, and let the rest of the message be the value!
> > even if it would work, I think it's ugly. If someone can convince me
> > it's not ugly, or give a better (i.e. faster) solution, I'd be happy.
> Although dictionaries are neat, I don't see how they would work here - you
> can't sort a dictionary, and two messages may have the same date.

You extract the keys into a list, sort them, and then use the sorted keys to
reference the dictionary. As far as duplicates go, I find that using the
in which I added stuff is adequate - and it eliminates any questions about
the sort is stable. It's very easy in Python - rather than keeping a
counter, you
can use len(dictionary) to get a usable number.

John Roth

> Often, if you want to sort things on some field, you want the "decorate,
> sort, undecorate" pattern (aka Schwartzian transform). In this case, if
> have a list of messages, you want to change it into a list of (date,
> message) tuples, sort that, then change it back into a list of messages.

As a previous poster said, using that could be quite expensive - it has to
at the actual message bodies to determine the order.

> Something like
> messages = [...]
> decorated = [ (get_date_in_seconds(message), message) for message in
> decorated.sort()
> messages = [ part[1] for part in decorated ]
> --
> Remco Gerlich

More information about the Python-list mailing list