我有以下資料:
[
{
"id": 2,
"members": [
{
"id": 1,
"username": "stefan",
"email": "[email protected]"
},
{
"id": 9,
"username": "John",
"email": "[email protected]"
}
],
"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": "[email protected]"
},
{
"id": 11,
"username": "Sharon",
"email": "[email protected]"
}
],
"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
},
]
},
]
每個字典代表一個聊天對話,還包含屬于每個聊天 convo 的所有訊息的鍵。
我的目標是根據哪個具有最新訊息對 convos 串列進行排序(因此基于“created_on”鍵)
即如果聊天 2 的最后一條聊天訊息是 5 月 9 日下午 5 點,而聊天 1 的最后一條聊天訊息是 5 月 9 日下午 3 點,我希望聊天 2 的字典在串列中排在第一位
我一直在努力解決這個問題。我試過了:
new_list = data.sort(key=lambda x: ( x['messages']['created_on']))
但這不起作用,因為訊息鍵的值是另一個串列,而且我認為基于此字串格式的日期進行排序也不起作用。
將不勝感激任何幫助
uj5u.com熱心網友回復:
您需要致電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://www.uj5u.com/net/471961.html
上一篇:比較多個字典中的值
