Wie wird ein verschachteltes Python 3-Wörterbuch maskiert, um ein neues Wörterbuch mit nur bestimmten Elementen zurückzugeben?

8

Ich verwende mehrere Endpunkte einer API, die in den zurückgegebenen Daten sehr ausführlich sind. Ich möchte eine Teilmenge dieser Daten an anderer Stelle an anderer Stelle bereitstellen.

Angenommen, ich habe mehrere Wörterbücher wie diese (die ich durchschleifen und filtern möchte):

%Vor%

Ich möchte eine Funktion erstellen, die das Wörterbuch aufnimmt, zusammen mit einer "Maske", mit der ein neues Wörterbuch nur für die erlaubten Elemente erstellt wird. Dies könnte eine Beispielmaske sein (obwohl ich mit jedem Format arbeiten kann, das den resultierenden Code am prägnantesten macht):

%Vor%

Die Funktion sollte dann Folgendes zurückgeben:

%Vor%

Gibt es etwas, das bereits in Python 3 eingebaut ist, um dabei zu helfen? Es sieht so aus, als wenn ich das manuell machen müsste, wird es ziemlich schnell hässlich werden. Ich habe itertools.compress gefunden, aber das scheint für Listen zu sein und wird nicht mit der Komplexität von Wörterbüchern umgehen.

    
Todd 19.09.2017, 23:46
quelle

3 Antworten

3

Sie können ein neues dict rekursiv aus der Maske erstellen, indem Sie nur die entsprechenden Werte im Hauptdict auswählen:

%Vor% %Vor%     
Moses Koledoye 19.09.2017, 23:59
quelle
2

Dies wäre eine gute Möglichkeit, Rekursion zu verwenden, hier ist ein Beispielcode, den ich nicht getestet habe:

%Vor%     
robert king 19.09.2017 23:54
quelle
0

Dies wäre wahrscheinlich eine rekursive Funktion. Auch für die Maske empfehle ich dieses Format: mask = ["id", "name", "model.id", "model.name", "model.manufacturer.name"]

Dann würden Sie zuerst nur Einträge behalten, die in der Maske benannt sind:

%Vor%

Je nachdem, ob Sie Unterwörterbücher entfernen möchten, die nicht in der Maske enthalten waren und keine Unterelemente enthielten, können Sie die zweite Stufe einfügen:

%Vor%

Endgültiger Code: filterstage2(filterstage1(dictionary, mask), mask) . Sie können die zwei Stufen kombinieren, wenn Sie möchten.

    
HyperNeutrino 20.09.2017 00:04
quelle

Tags und Links