我有以下数据:
[
{
"id": 2,
"members": [
{
"id": 1,
"username": "stefan",
"email": "stefan@testmail.com"
},
{
"id": 9,
"username": "John",
"email": "John@gmail.com"
}
],
"title": "Conversation 2",
"messages": [
{
"message": "Conv 2 message 1",
"created_on": "03.05.2022 17:00",
"created_by": 1
},
{
"message": "Conv 2 message 2",
"created_on": "03.05.2022 17:00",
"created_by": 9
}
]
},
{
"id": 1,
"members": [
{
"id": 1,
"username": "stefan",
"email": "stefan@testmail.com"
},
{
"id": 11,
"username": "Sharon",
"email": "sharon@testmail.com"
}
],
"title": "Conversation 1",
"messages": [
{
"message": "Conv 1 message 1",
"created_on": "03.05.2022 17:12",
"created_by": 1
},
{
"message": "Conv 1 message 2",
"created_on": "03.05.2022 17:12",
"created_by": 11
},
]
},
]每个字典表示一个聊天会话,并包含属于每个聊天会议的所有消息的键。
我的目标是根据最新消息(基于"created_on“键)对集会列表进行排序。
如果聊天2的最后一次聊天消息是5月9日下午5点,聊天1的最后一次聊天消息是在5月9日下午3点,我希望聊天2的字典在列表中排在第一位。
我一直在努力想办法解决这个问题。我试过:
new_list = data.sort(key=lambda x: ( x['messages']['created_on']))但是这不起作用,因为消息键的值是另一个列表,而且我认为基于这种字符串格式的日期排序也是行不通的。
会很感激你的帮助
发布于 2022-05-09 17:05:04
您需要调用max()以获取每个列表中的最新聊天消息。
new_list = sorted(data, key=lambda x: max(msg['created_on'] for msg in x['messages']))但还有另外一个问题。您的日期字符串不是可以正确排序的格式。您应该将它们更改为YYYY-MM-DD格式,或者调用datetime.strptime(msg['created_on'], '%d.%m.%Y %H:%M')来解析它们。
https://stackoverflow.com/questions/72175730
复制相似问题