2017-07-04 3 views
0

ich einen Python Wörterbuch habe data.I ist mit Python 3 .Der Wörterbuch ist wie unten:benutzerdefinierte Sortierung in Multi-Level-Python-Wörterbuch

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", 
        "+" 
       ] 
      ] 
     } 
    } 
} 

Ich bin das Wörterbuch in dem Balg Code Zugriff auf .

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) 

Ausgang:

g35 
    exon 
    gene 
    CDS 
g17 
    exon 
    gene 
    CDS 

Aber ich brauche die Ausgabe im Format unten. Kann mir bitte jemand helfen, das Problem zu lösen.

Erwartete Ausgabe:

g17 
    gene 
    CDS 
    exon 
g35 
    gene 
    CDS 
    exon 
+0

Sorry, meinst du vor g17 und dann g35 weil 17 vorher kommt? – CunivL

+0

@ChiaraL ja, brauche ich die Sortierung in zwei Teile, d. H. (G17, g35) anstelle von (g35, g17) [numerische Reihenfolge] und in Gen, CDS, Exon Teil – Arijit

Antwort

1

Sie diese Elemente nicht neu anordnen können, da sie Wörterbücher sind, aber Sie können sie Reihenfolge beim Drucken:

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) 

Sie werden halten müssen ein Lookup-Diktat, so dass die inneren Schlüssel in der gewünschten Reihenfolge angezeigt werden.

Ausgang:

g17 
    gene 
    CDS 
    exon 
g35 
    gene 
    CDS 
    exon 

Wenn Sie mehr inneren Schlüssel haben, die explizite Bestellung benötigen, dann fügen Sie einfach dann zu Ihrem Nachschlag.

+0

Ist dies ** Lookup ** Diktat Groß-und Kleinschreibung? – Arijit

+0

@Arijit Tatsächlich ist es. Ist das ein Problem? –

+0

@COLDSPEED Es wird ein bisschen problematisch für mich. Kann mir bitte helfen, diesen Teil zu sortieren. – Arijit

Verwandte Themen