Python-Wörterbuch-Werte sortieren

8

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:

%Vor%

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.

    
marsx 18.05.2011, 14:06
quelle

4 Antworten

7

Eine einfache Lösung für kleine Dicts ist

%Vor%

Eine effizientere, weniger lesbare Version für größere Dicts:

%Vor%     
Sven Marnach 18.05.2011, 14:12
quelle
6

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.

%Vor%

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.

    
neurino 18.05.2011 14:09
quelle
1

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%     
Ben Burns 18.05.2011 14:11
quelle
0

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.

    
DzinX 18.05.2011 14:57
quelle

Tags und Links