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

我有一list本字典python。我想按keys进行排序,即,首先是 by chain_id,然后是 by start.residue_number,然后是 by end.residue_number。在list下面,第 4 个和第 6 个元素应该相反。我可以使用sortedwithfrom operator import itemgetter, attrgetter进行排序chain_id,但是如何使用dictionaryinside进行排序dictionary?


            "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"

                },

               


慕桂英4014372
浏览 188回答 2
2回答

MM们

我d以您的命令为准,并通过sorted和解决了lambda# Sort with chain_idIn [93]: sort_1 = sorted(d['mappings'],key=lambda x:x['chain_id'])# Sort with start residue numberIn [94]: sort_2 = sorted(sort_1,key=lambda x:x['start']['residue_number'])# Sort with end residue numberIn [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 的回答。

繁华开满天机

如果所有键都按降序排序,您可以使用list.sort()或sorted()函数并创建一个返回键函数的元组:print(    sorted(        mappings,         key=lambda x: (            x['chain_id'],             x['start']['residue_number'],             x['end']['residue_number']        )    ))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python