Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多级python字典中的自定义排序_Python_Sorting_Dictionary - Fatal编程技术网

多级python字典中的自定义排序

多级python字典中的自定义排序,python,sorting,dictionary,Python,Sorting,Dictionary,我有一个python字典数据。我正在使用python 3。字典如下所示: dct = { "3LHet": { "g35": { "exon": [ [ "197631", "197742", "-" ], [

我有一个python字典数据。我正在使用python 3。字典如下所示:

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中指定它。是的,它可以放在后面。