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

2024-04-20 03:26:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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

Tags: 数据代码infor字典itemsfeaturedct
1条回答
网友
1楼 · 发布于 2024-04-20 03:26:35

您不能对这些项目重新排序,因为它们是字典,但您可以在打印时对它们进行排序:

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

如果有更多的内键需要显式排序,那么只需将其添加到查找中。你知道吗

相关问题 更多 >