基于其他键/值对的评估从Python dict返回值

时间:2017-04-25 03:48:59

标签: python dictionary

我有三个这样的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.

2 个答案:

答案 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