为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英4014372 2021-05-30 15:19:06
我有一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"                },               
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

我d以您的命令为准,并通过sorted和解决了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 的回答。


查看完整回答
反对 回复 2021-06-01
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

如果所有键都按降序排序,您可以使用list.sort()或sorted()函数并创建一个返回键函数的元组:


print(

    sorted(

        mappings, 

        key=lambda x: (

            x['chain_id'], 

            x['start']['residue_number'], 

            x['end']['residue_number']

        )

    )

)


查看完整回答
反对 回复 2021-06-01
  • 2 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信