我有三个这样的Python词典:
dict_1 = {
'Id':'001',
'CreatedDate':'2017-04-24T06:49:28.000Z',
'FirstName':'R',
'LastName':'Hendrix',
'Company':'Hooli',
'Age':29
}
dict_2 = {
'Id':'002',
'CreatedDate':'2010-01-23T06:49:28.000Z',
'FirstName':'Richard',
'LastName':'Hendricks',
'Company':'Pied Piper',
'Age':30
}
dict_3 = {
'Id':'003',
'CreatedDate':'2013-01-23T06:49:28.000Z',
'FirstName':'Richard',
'LastName':'Hendricks',
'Company':'Pied Piper',
'Age':31
}
我想创建函数以根据CreatedDate
值从这些字典中获取最新或最旧的值。
我想我需要将所有这些词汇放在一个列表中:
list_of_dicts = [dict_1, dict_2, dict_3]
函数可能会这样工作:
def get_newest(
list_of_dicts,
created_date_fieldname='CreatedDate',
return_field='Company'
):
# TODO - take in two or more dicts, and return the newest Company
# value based on CreatedDate field.
答案 0 :(得分:1)
您可以使用datetime.strptime()
来解析日期,之后您只需比较它们,直到找到最新日期为止。
from datetime import datetime
def get_newest(list_of_dicts, created_date_fieldname='CreatedDate', return_field='Company'):
if not list_of_dicts:
return None
newest = list_of_dicts[0]
for current in list_of_dicts:
newest_date = datetime.strptime(newest[created_date_fieldname], "%Y-%m-%dT%H:%M:%S.%fZ")
current_date = datetime.strptime(current[created_date_fieldname], "%Y-%m-%dT%H:%M:%S.%fZ")
if current_date >= newest_date:
newest = current
return newest[return_field]
现在执行print(get_newest(list_of_dicts))
(给定您的数据)将输出:
Hooli
请注意,如果有最新日期的多个实例。然后将选择最后一个实例。如果您改为第一个实例,则改为使用current_date > newest_date
。
答案 1 :(得分:0)
您可以使用max和min内置功能。</ p>
>>> from datetime import datetime
>>> def get_newest(list_of_dicts, created_date_fieldname='CreatedDate', return_field='Company'):
... return max(list_of_dicts, key=lambda x: datetime.strptime(x[created_date_fieldname], "%Y-%m-%dT%H:%M:%S.%fZ"))[return_field]
...
>>> print get_newest(list_of_dicts)
Hooli