In python, sorting on date field, field may sometimes be null

python, sorting

Solution

Using a `key=` function is definitely right, you just have to decide how you want to treat the `None` values -- pick a `datetime` value that you want to treat as the equivalent of `None` for sorting purposes. E.g.:

import datetime
mindate = datetime.date(datetime.MINYEAR, 1, 1)

def getaccountingdate(x):
  return x['accountingdate'] or mindate

results = sorted(results, key=getaccountingdate, reverse=True)

Just see how much simpler this is than defining a `cmp` function instead -- and if you do some benchmarking you'll find it's also significantly faster! There's no upside at all in using a `cmp` function instead of this `key` function, and it would be a bad design choice to do so.

Problem

I am having a hard time coming up with a slick way to handle this sort. I have data coming back from a database read. I want to sort on the accoutingdate. However, accoutingdate may sometimes be null. I am currently doing the following: ``` results = sorted(results, key=operator.itemgetter('accountingdate'), reverse=True) ``` But, this bombs with "TypeError: can't compare datetime.date to NoneType" due to some accoutingdates being null. What is the "most correct" or "most Pythonic" way to handle this?

Original source