如何在python字典中获取具有最大日期值的项目?

How to get the item with max date value in a python dictionary?

a:词典P></

1
2
3
from datetime import datetime

a = {"ID":3,"CITY":"ATLANTIS","FOUNDATION":datetime(2014,10,12),"COLLAPSE":datetime(2010,10,12),"REGENERATE":datetime(2011,10,12)}

你会如何get the which has the value in this dictionary(oldest日期在这家"COLLAPSE":datetime(2010,10,12))?记住的,是不相同的数据类型的值。P></


如果您想要最早的日期,那么您需要使用min(),而不是max();时间越早的日期时间排序就越晚。

您需要使用可在此处调用的自定义key,并针对任何不是datetime对象的值返回datetime.max,以折扣该密钥:

1
2
3
4
from datetime import datetime

min(a.iteritems(),
    key=lambda i: i[1] if isinstance(i[1], datetime) else datetime.max)

这将返回键和值。

要仅获取密钥,请使用:

1
min(a, key=lambda k: a[k] if isinstance(a[k], datetime) else datetime.max)

就价值而言:

1
2
min(a.itervalues(),
    key=lambda v: v if isinstance(v, datetime) else datetime.max)

在所有情况下,只有获得要比较的值的确切语法不同。

演示:

1
2
3
4
5
6
7
8
9
10
>>> from datetime import datetime
>>> a = {"ID":3,"CITY":"ATLANTIS","FOUNDATION":datetime(2014,10,12),"COLLAPSE":datetime(2010,10,12),"REGENERATE":datetime(2011,10,12)}
>>> min(a.iteritems(),
...     key=lambda i: i[1] if isinstance(i[1], datetime) else datetime.max)
('COLLAPSE', datetime.datetime(2010, 10, 12, 0, 0))
>>> min(a, key=lambda k: a[k] if isinstance(a[k], datetime) else datetime.max)
'COLLAPSE'
>>> min(a.itervalues(),
...     key=lambda v: v if isinstance(v, datetime) else datetime.max)
datetime.datetime(2010, 10, 12, 0, 0)