Legen Sie einen geschachtelten Diktatwert fest und erstellen Sie Zwischenschlüssel

8

Ich habe das Gefühl, dass ich kürzlich einen Weg gesehen habe, dies zu tun. Angenommen, ich habe ein leeres Diktat und möchte einen Wert in ein verschachteltes Diktat in diesem leeren Diktat setzen, aber offensichtlich wurde das verschachtelte Diktat noch nicht erstellt. Gibt es eine 1-zeilige Möglichkeit, die Zwischenschlüssel zu erstellen? Das möchte ich tun:

%Vor%

Wenn Sie diesen Code ausführen, erhalten Sie eine KeyError-Ausnahme für 'foo'. Gibt es eine Funktion zum Erstellen von Zwischenschlüsseln?

Danke.

    
skandocious 18.04.2012, 21:43
quelle

3 Antworten

15
%Vor%

Wenn Sie mydict['foo'] aufrufen, wird mydict['foo'] auf eine andere recursivedict gesetzt. Es wird auch ein recursivedict für mydict['foo']['bar']['foobar'] erstellt, aber dann wird es rausgeworfen, indem man 25 zuweist.

    
Dougal 18.04.2012, 21:45
quelle
3

Eine alternative Option ist - abhängig von Ihrer Verwendung - die Verwendung von Tupeln als Schlüssel anstelle von verschachtelten Wörterbüchern:

%Vor%

Das funktioniert ganz gut, es sei denn, Sie möchten zu jedem Zeitpunkt einen Zweig des Baumes bekommen (Sie können in diesem Fall nicht mydict ['foo'] erhalten).

Wenn Sie wissen, wie viele Verschachtelungsebenen Sie verwenden möchten, können Sie auch functools.partial anstelle von Lambda.

%Vor%

Einige Leute finden es besser lesbar und können Instanzen schneller erstellen als die äquivalente lambda-basierte Lösung:

%Vor%

Obwohl es wie immer keine Punkte gibt, die optimieren, bis Sie wissen, dass es einen Flaschenhals gibt, wählen Sie also das, was am nützlichsten und lesbar ist, bevor Sie am schnellsten sind.

    
Gareth Latty 18.04.2012 21:57
quelle
0

Nicht sicher, warum Sie das möchten, aber:

%Vor%     
MattH 18.04.2012 21:48
quelle

Tags und Links