Thank you all very much for your help.
I did the following and it works:
imgs=v.keys() imgs.sort(lambda a,b: cmp( time.strptime(str(v[a][9]['date']), '%Y:%m:%d %H:%M:%S'), time.strptime(str(v[b][9]['date']), '%Y:%m:%d %H:%M:%S')) ) for i in imgs: ...
Cool. If you ever find that this is a speed problem, it's worth pointing out that the decorate-sort-undecorate pattern is usually slightly faster:
------------------------------ test.py ------------------------------ import datetime import time
# returns data in a similar format to yours def get_data(n): today = datetime.datetime(2005, 3, 8) deltas = [datetime.timedelta(seconds=1e6*i) for i in xrange(-n, n)] times = [(today + delta).strftime('%Y:%m:%d %H:%M:%S') for delta in deltas] return dict([(i, {9:{'date':time}}) for i, time in enumerate(times)])
def sortcmp(data): imgs = data.keys() imgs.sort(lambda a,b: cmp( time.strptime(str(data[a][9]['date']), '%Y:%m:%d %H:%M:%S'), time.strptime(str(data[b][9]['date']), '%Y:%m:%d %H:%M:%S')) ) return imgs
def sortdsu(data): decorated = [(time.strptime(str(data[key][9]['date']), '%Y:%m:%d %H:%M:%S'), key) for key in data] decorated.sort() return [key for date, key in decorated]
# Requires 2.4 def sortkey(data): def value(key): return time.strptime(str(data[key][9]['date']), '%Y:%m:%d %H:%M:%S') return sorted(data, key=value) ---------------------------------------------------------------------
And the timing results:
[D:\Steve]$ python -m timeit -s "import test; d = test.get_data(1000)" "test.sortcmp(d)"
10 loops, best of 3: 274 msec per loop
[D:\Steve]$ python -m timeit -s "import test; d = test.get_data(1000)" "test.sortdsu(d)"
10 loops, best of 3: 131 msec per loop
# Requires 2.4
[D:\Steve]$ python -m timeit -s "import test; d = test.get_data(1000)" "test.sortkey(d)"
10 loops, best of 3: 131 msec per loop
HTH,
STeVe -- http://mail.python.org/mailman/listinfo/python-list