我有一list
本字典python
。我想按key
s进行排序,即,首先是 by chain_id
,然后是 by start.residue_number
,然后是 by end.residue_number
。在list
下面,第 4 个和第 6 个元素应该相反。我可以使用sorted
withfrom operator import itemgetter, attrgetter
进行排序chain_id
,但是如何使用dictionary
inside进行排序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"
},
{
"entity_id": 1,
"end": {
"residue_number": 63
},
"start": {
"residue_number": 1
},
"chain_id": "B",
"struct_asym_id": "B"
}
]
我假设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 的回答。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句