按日期键对Python字典进行排序

2024-05-23 20:07:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在主词典中,日期是一个值。有相同日期的数据。然后我取了日期并通过创建一个二维dict对其进行分组,其中日期是键。

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"
}

我怎样才能做到?
我正在使用Python2.6


Tags: 数据data排序somedict词典降序
2条回答

这里的想法是使用OrderedDict,因为dictionary没有排序的范围,而orderedict保留条目顺序。

这里的想法是使用list of tuples of (key, value) pairs,因为dictionary没有排序范围,而orderedict保留条目顺序。 此外,我们还必须将键转换为实际的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')]

说明:(用于将键转换为日期时间进行排序)

如果将日期字段保留为字符串,则会考虑字典顺序,并且30之后,因此a>bTrue,但它们的日期对应项不是这样。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

您可以使用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')]

相关问题 更多 >