The idea here is to use OrderedDict
as dictionary
has no scope for ordering while OrderedDict preserves the entry order.
The idea here is to use list of tuples of (key, value) pairs
as dictionary
has no scope for ordering while OrderedDict preserves the entry order.
Also we must convert the keys to actual datetime
object for the sort to work perfectly otherwise sorting on string based fields happen alphabetically.
Code :
from datetime import datetime
#from collections import OrderedDict
data = {
"01-01-2015" : "some data",
"05-05-2015" : "some data",
"03-04-2015" : "some data"
}
#ordered_data = OrderedDict(
# sorted(data.items(), key = lambda x:datetime.strptime(x[0], '%d-%m-%Y'), reverse=True))
#Since OP is using python 2.6 where OrderedDict is not present, I changed the solution and the original solution is commented out
ordered_data = sorted(data.items(), key = lambda x:datetime.strptime(x[0], '%d-%m-%Y'), reverse=True)
print(ordered_data)
Output :
[('05-05-2015', 'some data'), ('03-04-2015', 'some data'),
('01-01-2015', 'some data')]
Explanation : (For converting keys to datetime for sorting)
If you keep the date field as string then the lexicographical order is considered and 3
comes after 0
hence a>b
is True
but same is not true for their date counterparts. Feb
definitely comes after Jan
.
a = "30-01-2015"
b = "01-02-2015"
print(a>b) #True
a_datetime = datetime.strptime(a, '%d-%m-%Y')
b_datetime = datetime.strptime(b, '%d-%m-%Y')
print(a_datetime>b_datetime) #False