Larry Martell wrote: > I have a list containing a list of strings that I want to sort > numerically by one of the fields. I am doing this: > > sorted(rows, key=float(itemgetter(sortby))) > > Which works fine as long as all the sort keys convert to a float.
No, that cannot work; unless you have redefined float() you 'l get a TypeError either here >>> from operator import itemgetter >>> float(itemgetter(42)) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: float() argument must be a string or a number, not 'operator.itemgetter' or here: >>> sorted("abc", key=3.0) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'float' object is not callable > Problem is that some are blank or None and those throw an exception. > How can I handle that case and still sort? I'd want the blank or None > fields to come out either at the beginning or end of the sorted list > (not sure what the customer wants for this yet). Make the key function return a tuple: >>> def none_blank_float(value): ... if value is None: return (0,) ... if not value: return (1,) ... return 2, float(value) ... >>> sorted(["1", "10", "2", None, "3", "", "5"], key=none_blank_float) [None, '', '1', '2', '3', '5', '10'] -- https://mail.python.org/mailman/listinfo/python-list