Python:在对象列表中记录最旧的日期值

时间:2015-07-04 16:18:39

标签: python

虽然我了解您可以使用min(list_of_dates)在日期列表中获取最早的日期,但我说我有一个字典列表,其中包含具有日期值的任意键:

[{key1: date1}, {key2: date2}, {key3: date3}]

是否有内置方法返回具有最早日期值的字典?我是否需要遍历列表,如果是这样,那会是什么样的?

2 个答案:

答案 0 :(得分:0)

您可以获得每个字典的最小date

min(list_of_dictionaries, key=lambda d: min(d.values()))

如果它们都是date个对象,这只适用于列表中每个字典的1个或多个值。

演示:

>>> from datetime import date
>>> import random, string
>>> def random_date(): return date.fromordinal(random.randint(730000, 740000))
... 
>>> def random_key(): return ''.join([random.choice(string.ascii_lowercase) for _ in range(10)])
... 
>>> list_of_dictionaries = [{random_key(): random_date() for _ in range(random.randint(1, 3))} for _ in range(5)]
>>> list_of_dictionaries
[{'vsiaffoloi': datetime.date(2018, 1, 3)}, {'omvhscpvqg': datetime.date(2020, 10, 7), 'zyvrtvptuw': datetime.date(2001, 7, 25), 'hvcjgsiicz': datetime.date(2019, 11, 30)}, {'eoltbkssmj': datetime.date(2016, 2, 27), 'xqflazzvyv': datetime.date(2024, 9, 1), 'qaszxzxbsg': datetime.date(2014, 11, 26)}, {'noydyjtmjf': datetime.date(2013, 6, 4), 'okieejoiay': datetime.date(2020, 12, 15), 'ddcqoxkpdn': datetime.date(2002, 7, 13)}, {'vbwstackcq': datetime.date(2025, 12, 14)}]
>>> min(list_of_dictionaries, key=lambda d: min(d.values()))
{'omvhscpvqg': datetime.date(2020, 10, 7), 'zyvrtvptuw': datetime.date(2001, 7, 25), 'hvcjgsiicz': datetime.date(2019, 11, 30)}

或每个字典只有一个值:

>>> list_of_dictionaries = [{random_key(): random_date()} for _ in range(5)]
>>> list_of_dictionaries
[{'vmlrfbyybp': datetime.date(2001, 10, 25)}, {'tvenffnapv': datetime.date(2003, 1, 1)}, {'ivypocbyuz': datetime.date(2026, 8, 9)}, {'trywaosiqm': datetime.date(2022, 7, 29)}, {'ndqmejmfqj': datetime.date(2001, 2, 13)}]
>>> min(list_of_dictionaries, key=lambda d: min(d.values()))
{'ndqmejmfqj': datetime.date(2001, 2, 13)}

答案 1 :(得分:-1)

根据official docsmin支持任意键函数来指定要比较的内容。如果您需要更具体的行为,您也可以考虑使用sorted