虽然我了解您可以使用min(list_of_dates)
在日期列表中获取最早的日期,但我说我有一个字典列表,其中包含具有日期值的任意键:
[{key1: date1}, {key2: date2}, {key3: date3}]
是否有内置方法返回具有最早日期值的字典?我是否需要遍历列表,如果是这样,那会是什么样的?
答案 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 docs,min
支持任意键函数来指定要比较的内容。如果您需要更具体的行为,您也可以考虑使用sorted
。