尝试转换为datetime时出现Lambda语法错误

时间:2017-08-23 20:57:28

标签: python lambda

我试图按实际日期时间排序字典列表,同时保留值。类似的东西:

[
    {
        "count": "33",
        "Datetime": "2017-08-22 23:26"
    },
    {
        "count": "35",
        "Datetime": "2017-08-22 23:25"
    },
    {
        "count": "22",
        "Datetime": "2017-08-22 23:27"
    },
]

应按日期时间排序。 我试过了:

def sort_data_by_datetime(data, field_name='Datetime', datetime_format='%Y-%m-%d %H:%M'):

    return sorted(data, key=lambda x: datetime.strptime(x[field_name])

但语法错误,最终得到:

def sort_data_by_datetime(data, field_name='Datetime', datetime_format='%Y-%m-%d %H:%M'):

    def convert_datestring_to_datetime(x):
        return datetime.strptime(x[field_name], datetime_format)

    # return sorted(data, key=lambda x: datetime.strptime(x[field_name])
    return sorted(data, key=convert_datestring_to_datetime)

我认为lambdas只需要一个表达式,而上面的lambda似乎是一行。那个lambda的语法错误在哪里?

2 个答案:

答案 0 :(得分:1)

你错过了一个关闭的parens。但是,除此之外,您还需要将格式字符串传递给strptime以使其正常工作:

def sort_data_by_datetime(data, field_name='Datetime', datetime_format='%Y-%m-%d %H:%M'):
    return sorted(data, key=lambda x: datetime.strptime(x[field_name], datetime_format))

答案 1 :(得分:1)

如果您使用的是ISO 8601日期,则只需按字母顺序排序即可:

def sort_data_by_datetime(data, field_name='Datetime'):
    return sorted(data, key=lambda x: x[field_name])

或就地排序,效率稍高:

def sort_data_by_datetime(data, field_name='Datetime'):
    data.sort(key=lambda x: x[field_name])
    return data