2016-04-15 8 views
0

Wie kann ich ein mehrschichtiges Wörterbuch sortieren, indem ich die Schlüssel des zweiten Ebenenwörterbuchs neu anordne? Ich denke, ein Beispiel wäre ein besserer Weg, es zu präsentieren.Mehrschichtiges Wörterbuch sortieren, indem das zweite Ebenenwörterbuch sortiert wird

Das ursprüngliche mehrschichtige Wörterbuch:
{'John': {'Low >3 days': 3,'Low >1 day': 2,'High <1 day': 2,'High >3 days': 3,'Low <1 day': 1,'High >1 day': 1},'Mary': {'High >1 day': 5,'High >3 days': 1,'Low <1 day': 0, 'Low >1 day': 2, 'Low >3 days': 9, 'High <1 day': 5}}

Ich versuche, die zweite Schicht Wörterbuch mit Änderung der ersten Schicht Wörterbuch und bewegen Sie die zweite Schicht Schlüssel-Wert-Paar zusammen in der gleichen Zeit zu arrangieren. Die Reihenfolge der zweiten Schicht Wörterbuch Schlüssel ist High <1 day, Low <1 day, High >1 day, Low >1 day, High >3 days, Low >3 days. Die erwartete Ausgabe wie folgt sein würde:
{'John': {'High <1 day': 2,'Low <1 day': 1,'High >1 day': 1,'Low >1 day': 2,'High >3 days': 3,'Low >3 days': 3},'Mary': {'High <1 day': 5,'Low <1 day': 0,'High >1 day': 5,'Low >1 day': 2,'High >3 days': 1,'Low >3 days': 9}}

Antwort

0

Ich glaube, Sie haben ein grundlegendes Missverständnis darüber, was ein Wörterbuch ist. Es hat keinen Sinn, die Schlüssel eines Wörterbuchs zu sortieren, da das Wörterbuch ungeordnet ist. Es spielt keine Rolle, wo/wie sich die Schlüssel im Wörterbuch befinden. Ich denke, du hast zwei Möglichkeiten.


Wenn Sie machen Ihre Schlüssel in einer bestimmten Reihenfolge tot-Set sind, können Sie eine ordered dict verwenden. Dies erinnert an die Reihenfolge, in der Sie Ihre Schlüssel in Ihr Wörterbuch eingefügt haben. Wenn Sie bereits Ihr aktuelles Diktat haben, können Sie es mit dem folgenden Code in ein geordnetes Diktat konvertieren.

from collections import OrderedDict 
exDict = #... put your dict here 
keyOrder = ['High <1 day', 'Low <1 day', 'High >1 day', 'Low >1 day', 'High >3 days', 'Low >3 days'] 
ordDict = OrderedDict() 
for k in exDict.keys(): 
    ordDict[k] = OrderedDict() 
    for kO in keyOrder: 
     ordDict[k][kO] = exDict[k][kO] 

Wenn Sie ausdrucken oder Zugangsinformationen in einer bestimmten Reihenfolge sind versuchen, dann sollten Sie eine Variable für die Reihenfolge der Tasten, die Sie zugreifen möchten, definieren. Ähnlich wie bei der obigen Definition von keyorder können Sie eine Variable erstellen und diese Schleife durchlaufen, um auf die Diktatschlüssel in einer bestimmten Reihenfolge zuzugreifen.


Ein weiterer reference post.

0

Um dies zu erreichen, würden Sie eine OrderedDict vom collections Modul benötigen. Siehe diese post für Referenzen.

Verwandte Themen