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

时间:2017-07-04 15:58:55

标签: python sorting dictionary

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

1 个答案:

答案 0 :(得分:1)

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

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)

您需要保留查找字典,以便按照您想要的顺序显示内部键。

输出:

g17
   gene
   CDS
   exon
g35
   gene
   CDS
   exon

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