Glenn Linderman:

> how does one create a key that corresponds to ascending integer followed by 
> descending character string?

(Others may have already answered you because Google groups is very
slow.)

>>> seq = [(10, "abb"), (5, "zul"), (5, "hal"), (2, "of")]
>>> sorted(seq, key=lambda (n,s): (-n, s), reverse=True)
[(2, 'of'), (5, 'zul'), (5, 'hal'), (10, 'abb')]

A little harder question is how to create a key that corresponds to
ascending string followed by descending string?

To do that you can sort the data two times, relying on the stable
nature of the Python sort.

Another (silly?) solution may be to invent a "negate" function for
strings too:

>>> strneg = lambda txt: txt.translate(itable)
>>> itable = "".join(chr(i) for i in xrange(255, -1, -1))
>>> pairs = [('al', 'boo'), ('zul', 'ao'), ('al', 'den'), ('zul', 'o')]
>>> sorted(pairs, key=lambda (s1,s2): (s1, strneg(s2)))
[('al', 'den'), ('al', 'boo'), ('zul', 'o'), ('zul', 'ao')]

Bye,
bearophile
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to