我试图按实际日期时间排序字典列表,同时保留值。类似的东西:
[
{
"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的语法错误在哪里?
答案 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