多级python字典中的自定义排序
我有一个python字典数据。我正在使用python 3。字典如下所示:多级python字典中的自定义排序,python,sorting,dictionary,Python,Sorting,Dictionary,我有一个python字典数据。我正在使用python 3。字典如下所示: dct = { "3LHet": { "g35": { "exon": [ [ "197631", "197742", "-" ], [
dct = {
"3LHet": {
"g35": {
"exon": [
[
"197631",
"197742",
"-"
],
[
"198407",
"198470",
"-"
]
],
"gene": [
[
"197631",
"207214",
"-"
]
],
"CDS": [
[
"197631",
"197742",
"-"
],
[
"198407",
"198470",
"-"
]
]
},
"g17": {
"exon": [
[
"2010292",
"2011137",
"+"
]
],
"gene": [
[
"2010292",
"2011137",
"+"
]
],
"CDS": [
[
"2010292",
"2011137",
"+"
]
]
}
}
}
我正在使用下面的代码访问字典
for scaffold, scaffold_dct in dct.items():
for gene, gene_dct in scaffold_dct.items():
print(gene)
for feature, feature_dct in gene_dct.items():
print("\t"+feature)
输出:
g35
exon
gene
CDS
g17
exon
gene
CDS
但我需要以下格式的输出。有人能帮我解决这个问题吗
预期输出:
g17
gene
CDS
exon
g35
gene
CDS
exon
您无法对这些项目重新排序,因为它们是字典,但您可以在打印时对它们进行排序:
lookup = {'exon' : 1, 'cds' : 2, 'gene' : 3, }
for key, item in sorted(dct["3LHet"].items()):
print(key)
for subkey, subitem in sorted(item.items(), key=lambda x: lookup.get(x[0].lower(), 0)):
print(' ', subkey)
您需要保留一个查找dict,以便按照您想要的顺序显示内部键
输出:
g17
gene
CDS
exon
g35
gene
CDS
exon
如果您有更多需要显式排序的内键,那么只需将其添加到查找中。对不起,您的意思是在g17之前,然后是g35,因为17在前面?@ChiaraL是的,我需要两部分排序,即(g17,g35)而不是(g35,g17)[数字顺序]和基因中的CDS,外显子部分这个查找区分大小写吗?@Arijit确实如此。这是个问题吗?@COLDSPEED这对我来说有点问题。所以请帮我把这部分分类。@Arijit已修复。将
lookup
中的所有键定义为小写,然后在lambda中做了一个小更改。我再次编辑了lambda函数,以便不会引发错误。但是,如果您想显式地对该值进行排序,您需要在dict中指定它。是的,它可以放在后面。