Should I use a dictionary?

Remco Gerlich scarblac at pino.selwerd.nl
Tue Jun 26 03:09:34 EDT 2001


Gustaf Liljegren <gustafl at algonet.se> wrote in comp.lang.python:
> I have an object type for e-mail messages based on the rfc822 module. After 
> 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 understand, 
> everything in this process needs to be kept in memory). Anyway, the problem 
> is that I need some hints about how to sort the messages, as they are not 
> sorted in way I get them.
> 
> One idea I came up with was to put the date property of the message object 
> as a key in a dictionary, and let the rest of the message be the value! But 
> even if it would work, I think it's ugly. If someone can convince me that 
> 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.

Often, if you want to sort things on some field, you want the "decorate,
sort, undecorate" pattern (aka Schwartzian transform). In this case, if you
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.

Something like

messages = [...]
decorated = [ (get_date_in_seconds(message), message) for message in messages]
decorated.sort()
messages = [ part[1] for part in decorated ]

-- 
Remco Gerlich



More information about the Python-list mailing list