I expect a few repeats for most of the keys, and that s actually part of what I want to figure out in the end. (Said loosely, I want to group all the data entries having "similar" keys. For this I need to sort the keys first (data entries having _same_ key), and then figure out which keys are "similar").
If this is really your final goal, you may not want to sort. Consider code like the following:
>>> entries = [('a', '4'),
... ('x', '7'),
... ('a', '2'),
... ('b', '7'),
... ('x', '4')]
>>> counts = {}
>>> for entry in entries:
... key = entry[0]
... counts.setdefault(key, []).append(entry)
...
>>> for key in counts:
... print key, counts[key]
...
a [('a', '4'), ('a', '2')]
x [('x', '7'), ('x', '4')]
b [('b', '7')]I've grouped all entries with the same key together using a dict object and without the need for any sorting. If you had a good definition of 'similar', you could perhaps map all 'similar' keys to the same value in the dict.
If you really do need to sort, Python 2.4 provides a very nice way to sort by a particular key:
>>> import operator
>>> entries = [('a', '4'),
... ('x', '7'),
... ('a', '2'),
... ('b', '7'),
... ('x', '4')]
>>> entries.sort(key=operator.itemgetter(1))
>>> entries
[('a', '2'), ('a', '4'), ('x', '4'), ('x', '7'), ('b', '7')]Here, I've sorted the entries by the second item in each tuple. If you go this route, you should also look at itertools.groupby:
>>> import itertools
>>> entries = [('a', '4'),
... ('x', '7'),
... ('a', '2'),
... ('b', '7'),
... ('x', '4')]
>>> entries.sort(key=operator.itemgetter(1))
>>> for key, values in itertools.groupby(entries, operator.itemgetter(1)):
... print key, list(values)
...
2 [('a', '2')]
4 [('a', '4'), ('x', '4')]
7 [('x', '7'), ('b', '7')]The groupby basically does the sort of grouping of a sorted list that I think you had in mind...
Steve -- http://mail.python.org/mailman/listinfo/python-list
