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