Rory Campbell-Lange wrote:
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

Reply via email to