So greifen Sie auf alle Wörterbücher in einem Wörterbuch zu, in denen ein bestimmter Schlüssel einen bestimmten Wert hat

7

Ich habe ein Wörterbuch mit Wörterbüchern, wobei jedes verschachtelte Wörterbuch genau die gleichen Schlüssel hat, wie folgt:

%Vor%

Wie erhalte ich eine Liste (oder ein Wörterbuch) aller Wörterbücher, in denen 'city' den Wert 'bar' hat?

Der folgende Code funktioniert, ist aber nicht skalierbar:

%Vor%

Sagt 'city' kann 50.000 eindeutige Werte haben und das Wörterbuch all_dicts enthält 600.000 Werte, die Iteration über das Wörterbuch für jeden einzelnen Wert von 'city' ist nicht sehr effizient.

Gibt es eine skalierbare und effiziente Möglichkeit, dies zu tun?

    
IM94 10.01.2017, 10:20
quelle

4 Antworten

9

Was Sie tun könnten, ist einen Index für dieses Wörterbuch wie folgt zu erstellen:

%Vor%

Dies erfordert einige Verarbeitungszeiten sowie zusätzlichen Speicher, aber danach ist es sehr schnell. Wenn Sie alle Elemente mit cityName haben möchten, erhalten Sie sie folgendermaßen:

%Vor%

Das bringt viele Vorteile, wenn all_dicts einmal erstellt und danach mehrfach abgefragt wird.

Wenn all_dicts während der Ausführung Ihres Programms geändert wird, benötigen Sie etwas mehr Code, um cityIndex zu verwalten. Wenn ein item zu all_dicts hinzugefügt wird, tun Sie einfach:

%Vor%

Wenn ein Element entfernt wird, ist dies eine einfache Möglichkeit, es aus dem Index zu entfernen (vorausgesetzt, die Kombination aus "name" und "city" ist einzigartig unter Ihren Elementen):

%Vor%

Wenn es viel mehr Abfragen als Updates gibt, erhalten Sie immer noch eine enorme Leistungsverbesserung.

    
xzoert 10.01.2017, 11:32
quelle
7

Sie müssen alle Werte überprüfen; Es gibt keine Alternative dazu. Sie könnten jedoch einen vektorisierten Ansatz verwenden - Listenverständnis - was viel schneller ist als eine for-Schleife:

%Vor%

Die Verwendung von dict.values anstelle des Zugriffs auf die Wörterbuchschlüssel verbessert auch die Leistung und ist auch in Python 3 speichereffizient.

    
Moses Koledoye 10.01.2017 10:25
quelle
3

Oder verwenden Sie filter , in Python 3:

%Vor%

Oder mit pandas :

%Vor%     
Colonel Beauvel 10.01.2017 10:47
quelle
0
%Vor%

out:

%Vor%

Erstellen Sie ein Hilfsdict, um Stadt als Index zu speichern, und Sie können es sehr schnell referenzieren.

    
宏杰李 10.01.2017 10:36
quelle

Tags und Links