首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于嵌套值的字典排序表

基于嵌套值的字典排序表
EN

Stack Overflow用户
提问于 2022-05-09 17:03:05
回答 1查看 31关注 0票数 -1

我有以下数据:

代码语言:javascript
复制
[
    {
        "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的字典在列表中排在第一位。

我一直在努力想办法解决这个问题。我试过:

代码语言:javascript
复制
new_list = data.sort(key=lambda x: ( x['messages']['created_on']))

但是这不起作用,因为消息键的值是另一个列表,而且我认为基于这种字符串格式的日期排序也是行不通的。

会很感激你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-09 17:05:04

您需要调用max()以获取每个列表中的最新聊天消息。

代码语言:javascript
复制
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')来解析它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72175730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档