from __future__ import print_function, unicode_literals  # если будешь запускать из-под python2
import re
import datetime

inp = '''
6 Jan @ 4:03pm
8 Jan @ 2:17pm
9 Dec @ 4:00am
9 Dec @ 5:14pm
9 Dec @ 5:28am
10 Jan @ 2:55pm
10 Jan @ 4:21am
10 Jan @ 7:14pm
12 Dec @ 7:48pm
12 Dec @ 7:50pm
12 Jan @ 3:32pm
13 Dec @ 3:43pm
13 Dec @ 5:02am
13 Dec @ 5:24am
14 Jan @ 5:17pm
15 Jan @ 5:29am
21 Dec @ 3:56pm
21 Dec @ 9:40am
'''

date_str = '%d %b @ %I:%M%p'
date_format = "{day} {month} @ {hour}:{min}{ampm}"
re_format = r'(\d{1,2}) (\w{3}) @ (\d{1,2}):(\d{1,2})([a-p][m])'

regex = re.compile(re_format, re.I)
dates = regex.findall(inp)

l_dates = []

for date in dates:
    dt = datetime.datetime.strptime(date_format.format(
    	day=date[0], month=date[1], hour=date[2], min=date[3], ampm=date[4]),
    date_str)
    l_dates.append(dt)

l_dates.sort()

for date in l_dates:
    print(date.strftime(date_str))