尝试转换为日期时间时出现 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 的语法错误在哪里?

你缺少一个结束的参数。但是,除此之外,您还需要将格式字符串传递给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))

如果您使用的是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

最新更新