sorting tuples...

Steve Holden steve at holdenweb.com
Wed Sep 28 06:29:18 EDT 2005


Dan Sommers wrote:
> On 27 Sep 2005 19:01:38 -0700,
> nidhog at gmail.com wrote:
> 
> 
>>with the binary stuff out of the way, what i have is this string data:
> 
> 
>>20050922 # date line
>>mike
>>mike's message...
>>20040825 # date line
>>jeremy
>>jeremy's message...
>>...
> 
> 
>>what i want to do is to use the date line as the first data in a tuple
>>and the succeeding lines goes into the tuple, like:
> 
> 
>>(20050922, mike, mike's message)
> 
> 
>>then when it matches another date line it makes another new tuple with
>>that date line as the header data and the succeeding data, etc..
> 
> 
>>(20050922, mike, mike's message)
>>(20040825, jeremy, jeremy's message)
>>...
> 
> 
>>then i would sort the tuples according to the date.
> 
> 
>>is there an easier/proper way of doing this without generating alot of
>>tuples?
> 
> 
> You want a dictionary.  Python dictionaries map keys to values (in other
> languages, these data structures are known as hashes, maps, or
> associative arrays).  The keys will be the dates; the values will depend
> on whether or not you have multiple messages for one date.
> 
> If the dates are unique (which, looking at your data, is probably not
> true), then each item in the dictionary can be just one (who, message)
> tuple.
> 
> If the dates are not unique, then you'll have to manage each item of the
> dictionary as a list of (who, message) tuples.
> 
> And before you ask:  no, dictionaries are *not* sorted; you'll have to
> sort a separate list of the keys or the items at the appropriate time.
> 
I'm not sure this advice is entirely helpful, since it introduces 
complexities not really required by the simplistic tuple notation the OP 
seems to be struggling for.

Following the old adage "First, make it work; then (if it doesn't work 
fast enough) make it faster)", and making the *dangerous* assumption 
that each message genuinely is exactly three lines, we might write:

msglist = []
f = open("theDataFile.txt", "r")
for date in f:
   who = f.next() # pulls a line from the file
   msg = f.next() # pulls a line from the file
   msglist,append((date, who, msg))
# now have list of messages as tuples
msglist.sort()

After this, msglist should be  date-sorted list of messages. Though who 
knows what needs to happen to them next ...

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC                     www.holdenweb.com
PyCon TX 2006                          www.pycon.org




More information about the Python-list mailing list