So erhalten Sie den Schlüsselwert eines verschachtelten Wörterbuchs mit .get ()

8

Mit einem einfachen Wörterbuch wie:

%Vor%

Ich kann sicher verwenden:

%Vor%

und selbst wenn 'key3' nicht vorhanden ist, werden keine Fehler ausgegeben, da .get () immer noch None zurückgibt.

Wie würde ich die gleiche Einfachheit mit einem verschachtelten Schlüsselwörterbuch erreichen:

%Vor%

Das Folgende wird einen KeyError geben:

%Vor%

Dies wird durchlaufen:

%Vor%

aber es scheitert mit adn AttributeError: 'NoneType' Objekt hat kein Attribut 'get':

%Vor%     
alphanumeric 05.05.2014, 01:50
quelle

4 Antworten

16

dict.get akzeptiert zusätzlichen Parameter default . Das value wird anstelle von None zurückgegeben, wenn es keinen solchen Schlüssel gibt.

%Vor%     
falsetru 05.05.2014, 01:53
quelle
3

Es gibt einen sehr schönen Blogbeitrag von Dan O'Huiginn zum Thema verschachtelte Wörterbücher. Er schlägt schließlich vor, dict mit einer Klasse zu unterklassifizieren, die die Verschachtelung besser behandelt. Hier ist die Unterklasse, die so modifiziert wurde, dass sie mit Ihrem Fall umgehen kann, wenn Sie versuchen, auf Schlüssel mit nicht-diktierten Werten zuzugreifen:

%Vor%

Sie können auf verschachtelte vorhandene Schlüssel oder solche, die nicht existieren, verweisen. Sie können die Klammernotation für den Zugriff anstelle von .get () verwenden. Wenn für ein NestedDict-Objekt kein Schlüssel vorhanden ist, erhalten Sie ein leeres NestedDict-Objekt zurück. Die Initialisierung ist ein wenig wortreich, aber wenn Sie die Funktionalität benötigen, könnte es für Sie funktionieren. Hier sind einige Beispiele:

%Vor%     
jxstanford 05.05.2014 03:34
quelle
1

Ausnahmen verwenden:

%Vor%     
Robᵩ 05.05.2014 01:54
quelle
0

Das ist normal, da key3 nicht existiert

%Vor%

gibt keine zurück ..

NoneType-Objekt hat kein Attribut ..

Sie müssen also den Wert von myDict.get ('key3') speichern, testen, ob es nicht null ist und dann die Methode get für das gespeicherte Element verwenden

    
Tofandel 05.05.2014 01:56
quelle

Tags und Links