在主词典中,日期是一个值。有相同日期的数据。所以我接受了日期并通过创建一个二维字典对其进行分组,其中日期是关键。
data = {
"01-01-2015" : "some data",
"05-05-2015" : "some data",
"03-04-2015" : "some data"
}
现在我想按日期降序排序,以便它看起来像这样:
data = {
"05-05-2015" : "some data",
"03-04-2015" : "some data",
"01-01-2015" : "some data"
}
我怎样才能做到这一点?
我正在使用python 2.6
答案 0 :(得分:5)
这里的想法是使用 OrderedDict
,因为dictionary
没有订购范围,而OrderedDict会保留条目订单。
这里的想法是使用list of tuples of (key, value) pairs
,因为dictionary
没有订购范围,而OrderedDict保留了条目订单。
此外,我们必须将密钥转换为实际的datetime
对象,以使排序完美地工作,否则按字母顺序排序基于字符串的字段。
代码:
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)
输出
[('05-05-2015', 'some data'), ('03-04-2015', 'some data'),
('01-01-2015', 'some data')]
说明:(将密钥转换为日期时间以进行排序)
如果您将日期字段保留为字符串,则会考虑字典顺序,并3
在0
之后,因此a>b
为True
,但其日期不同同行。 Feb
绝对是在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
答案 1 :(得分:0)
您可以使用python的sorted方法,该方法将根据日期自动对数据进行排序并返回列表。
data = {"01-01-2015" : "some data","05-05-2015" : "some data","03-04-2015" : "some data"}
sorted(data.items(), reverse=True)
将产生结果:
[('05-05-2015', 'some data'), ('03-04-2015', 'some data'), ('01-01-2015', 'some data')]