From: jbauer at rubic.com (Jeff Bauer)
Date: Mon, 19 Apr 1999 00:32:54 GMT
Subject: Sorting tuples
References: <7fdkhf$12d$1@sparky.wolfe.net>
Message-ID: <371A79B6.F803063E@rubic.com>
Content-Length: 1134
X-UID: 1224                                                  

> I have a list of tuples
> [('a','p','q'),('b','r','s'),('c','t','u'),('a','v','w'),('b','x','y')],
> and I want to print out
> 
> a : p, q, v, w
> b : r, s, x, y
> c : t, u

Jon,

There are lots of cute ways to do this, and I
expect to see a bunch of followup posts that will
show off arcane Python wizardry, but the simple
solution is to use a dictionary.

The dictionary approach is quick, easy, and
more amenable to modification.

### Jon's list of tuples, shuffled
t = [ ('b','y','x'),
      ('a','v','w'),
      ('b','r','s'),
      ('c','u','t'),
      ('a','p','q'), ]

### build the dict
d = {}
for x in t:
    if not d.has_key(x[0]):
        d[x[0]] = []
    for y in x[1:]:
        d[x[0]].append(y)

### print the dict, sorting the values at the
### last possible moment.
keys = d.keys()
keys.sort()
for k in keys:
    d[k].sort()
    print k, ':', d[k]

It may not be obvious from the example above, but lists
of tuples can also just be sorted in place, e.g.

  t = [ ('b','x','y'), ...
  t.sort()

Python almost always follows the principle of least
surprise in this regard.

Best regards,

Jeff Bauer
Rubicon, Inc.




