如何在Python中根据不同级别的一组键对列表进行排序

如何在Python中根据不同级别的一组键对列表进行排序,python,sorting,dictionary,Python,Sorting,Dictionary,我在python中有一个词典列表。我想按键s排序,即首先按链id,然后按开始.剩余物编号,然后按结束.剩余物编号。在下面的列表中,第4个和第6个元素应该反过来。我可以使用sorted和来自操作符import itemgetter、attrgetter的对链id进行排序,但是如何使用词典中的进行排序 "mappings": [ { "entity_id": 1,

我在
python
中有一个
词典列表。我想按
s排序,即首先按
链id
,然后按
开始.剩余物编号
,然后按
结束.剩余物编号
。在下面的
列表中,第4个和第6个元素应该反过来。我可以使用
sorted
和来自操作符import itemgetter、attrgetter
链id
进行排序,但是如何使用
词典中的
进行排序

            "mappings": [
                {
                    "entity_id": 1,
                    "end": {
                        "residue_number": 63
                    },
                    "start": {
                        "residue_number": 1
                    },
                    "chain_id": "A",
                    "struct_asym_id": "A"
                },
                {
                    "entity_id": 1,
                    "end": {
                        "residue_number": 116
                    },
                    "start": {
                        "residue_number": 1
                    },
                    "chain_id": "A",
                    "struct_asym_id": "A"
                },
                {
                    "entity_id": 1,
                    "end": {
                        "residue_number": 124
                    },
                    "start": {
                        "residue_number": 1
                    },
                    "chain_id": "A",
                    "struct_asym_id": "A"
                },
                {
                    "entity_id": 1,
                    "end": {
                        "residue_number": 116
                    },
                    "start": {
                        "residue_number": 1
                    },
                    "chain_id": "B",
                    "struct_asym_id": "B"
                },
                {
                    "entity_id": 1,
                    "end": {
                        "residue_number": 124
                    },
                    "start": {
                        "residue_number": 1
                    },
                    "chain_id": "B",
                    "struct_asym_id": "B"
                },
                {
                    "entity_id": 1,
                    "end": {
                        "residue_number": 63
                    },
                    "start": {
                        "residue_number": 1
                    },
                    "chain_id": "B",
                    "struct_asym_id": "B"
                }
            ]

我假设
d
是你的命令,用
排序的
lambda

# Sort with chain_id
In [93]: sort_1 = sorted(d['mappings'],key=lambda x:x['chain_id'])
# Sort with start residue number
In [94]: sort_2 = sorted(sort_1,key=lambda x:x['start']['residue_number'])
# Sort with end residue number
In [95]: sort_3 = sorted(sort_2,key=lambda x:x['end']['residue_number'])
或者你可以排成一行

sorted(d['mappings'],key=lambda x:(x['chain_id'],x['start']['residue_number'],x['end']['residue_number']))

灵感来自leotrubach的答案。

如果所有键都要按降序排序,则可以使用或函数并创建元组返回键函数:

print(
    sorted(
        mappings, 
        key=lambda x: (
            x['chain_id'], 
            x['start']['residue_number'], 
            x['end']['residue_number']
        )
    )
)

这是
SyntaxError
而不是字典列表。你能提供一个例子,让我们看看你已经尝试了什么吗?这真的很有帮助。谢谢