sorting tuples...

nidhog at gmail.com nidhog at gmail.com
Mon Oct 3 15:50:05 CEST 2005


Steve Holden wrote:
> 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 ...

just to spit it all out to stdout in a nice formatted form so I can
save it to a file.

I'm still confused though, but I'm working on it. struct is nice.

>
> 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