2016-09-09 4 views
2

Ich versuche, ein verschachteltes Wörterbuch in Python zu sortieren.Python sortierte verschachtelte Wörterbuchliste

Im Moment habe ich ein Wörterbuch von Wörterbüchern. Ich konnte die äußeren Schlüssel sortieren, indem ich sortierte auf der Liste sortierte, bevor ich anfing, das Wörterbuch zu bauen, aber ich bin nicht imstande, die inneren Schlüssel gleichzeitig zu sortieren.

Ich habe versucht, mit der sortierten API zu verwirren, während immer noch Probleme damit haben.

Im Moment habe ich:

myDict = {'A': {'Key3':4,'Key2':3,'Key4':2,'Key1':1}, 
      'B': {'Key4':1,'Key3':2,'Key2':3,'Key1':4}, 
      'C': {'Key1':4,'Key2':2,'Key4':1,'Key3':3}}; 

Aber ich möchte:

myDict = {'A': {'Key1':1,'Key2':3,'Key3':4,'Key4':2}, 
      'B': {'Key1':4,'Key2':3,'Key2':1,'Key4':1}, 
      'C': {'Key1':4,'Key2':2,'Key3':3,'Key4':1}}; 

ich die Hilfe zu schätzen wissen!

+2

'collections.OrderedDict (sortiert ({ 'Key3': 4 'Key2': 3 'Key4': 2 'Key1': 1} .items()))' – ozgur

+0

dicts ungeordnet sind. Wie der Kommentar oben betrachten OrderedDict mehr hier: http://StackOverflow.com/Questions/526125/Why-is-Python-Ordering-My-Dictionary-Like-SO – GMarsh

+0

Warum brauchen Sie die Wörterbücher sortiert? – wwii

Antwort

1
>>> from collections import OrderedDict 

>>> def sortedDict(items): 
...  return OrderedDict(sorted(items)) 

>>> myDict = {'A': {'Key3':4,'Key2':3,'Key4':2,'Key1':1}, 
...   'B': {'Key4':1,'Key3':2,'Key2':3,'Key1':4}, 
...   'C': {'Key1':4,'Key2':2,'Key4':1,'Key3':3}} 

>>> sortedDict((key, sortedDict(value.items())) for key, value in myDict.items()) 
+0

Muss ich OrderedDict verwenden? Ich dachte, ich könnte durch myDict Tasten iterieren und irgendwie das innere Wörterbuch mit etwas wie \t \t sortierten (myDict [k] .items(), Schlüssel = Lambda x: x [0], reverse = False); –

+0

@MikeHatcher-Wörterbücher sind ungeordnete Sammlungen. Wenn Sie 'sorted' auf ein Dictionary anwenden, wie Sie es gesagt haben, gibt es ein Array von sortierten Tupeln zurück. Sobald Sie 'dict (sortierte (..))' auf einem Array aufrufen, um es in ein Diktat zu konvertieren, wird es wieder ungeordnet. Daher müssen Sie 'OrderedDict' verwenden. – ozgur

+1

Ah okay, ich denke, ich muss es anders erstellen, als ich es war, damit ich in der Reihenfolge drucken kann, die ich möchte. –