Ich habe 2 Wörterbücher, dict1
und dict2
, die dieselben Schlüssel, aber unterschiedliche Werte für die Schlüssel enthalten. Was ich machen möchte, ist für jedes Wörterbuch, sortiere die Werte von den größten zu den kleinsten und gebe dann jedem Wert einen Rang 1-N, wobei 1 der größte Wert ist. Von hier möchte ich die Differenz der Ränge für die Werte in jedem Wörterbuch für den gleichen Schlüssel erhalten. Zum Beispiel:
Ich weiß, dass Wörterbücher zufällig und nicht sortierbar sein sollen, aber vielleicht gibt es eine Methode, um die Schlüssel und Werte in eine Liste aufzunehmen? Die Hauptherausforderungen, denen ich mich gegenübersehe, sind, die Schlüssel und Werte nach Wert sortiert (vom größten zum kleinsten) und dann den Wert in den entsprechenden Rang in der sortierten Liste zu ändern.
Eine einfache Lösung für kleine Dicts ist
%Vor%Eine effizientere, weniger lesbare Version für größere Dicts:
%Vor%Sie könnten an collections.OrderedDict
interessiert sein Hier ist ein Beispiel, mein erster Gedanke ist, dass Sie auch nach Wörterbüchern mit Schlüsseln suchen, die nach Werten geordnet sind, Dinge, die od1
und od2
sind.
Wenn Sie sie nicht brauchen, ist Sven Lösung wahrscheinlich schneller.
edit : nicht so schneller, ehrlich ... (sven.py ist seine zweite, effizientere Version):
%Vor%Wenn jemand formatierte größere Diktate posten möchte, teste ich sie auch.
Welche Version von Python benutzt du? Wenn 2.7, verwende OrderedDict.
In den Python 2.7 Dokumenten :
%Vor%Wenn Sie Python 2.4-2.6 verwenden, können Sie OrderedDict weiterhin verwenden, indem Sie es hier von
installieren oder wenn Sie setuptools ausführen
%Vor%Ein Wörterbuch ist nicht die richtige Datenstruktur, um dieses Problem zu lösen. Sie sollten so schnell wie möglich in sortierte Listen konvertieren und das Wörterbuch nur als Endergebnis erstellen. Die folgende Beispiellösung verwendet möglichst Iteratoren und Generatorausdrücke, um zu vermeiden, dass auf dem Weg zu viele (möglicherweise große) Hilfslisten erstellt werden:
%Vor%Bitte beachten Sie, dass diese Lösung davon ausgeht, dass beide Dicts genau die gleichen Schlüssel enthalten.
Tags und Links python dictionary sorting