Python-Standarddict und Lambda
In jemand anderen code, den ich Lesen Sie die folgenden zwei Zeilen:
x = defaultdict(lambda: 0)
y = defaultdict(lambda: defaultdict(lambda: 0))
Als argument defaultdict ist ein Standard-Werk, denke ich, die erste Zeile bedeutet, dass, wenn ich rufe x[k] für einen nicht vorhandenen Schlüssel k (z.B. eine Aussage wie: v=x[k]), der Schlüssel-Wert-paar (k,0) werden automatisch dem Wörterbuch Hinzugefügt, wenn die Anweisung x[k]=0 wird zuerst ausgeführt. Bin ich richtig?
Und was ist mit y? Es scheint, dass die Standard-factory erstellen Sie eine defaultdict mit Standardwert 0. Aber was bedeutet das konkret? Ich habe versucht zu spielen, um mit ihm in der Python-shell, aber konnte nicht herausfinden, was es genau ist.
InformationsquelleAutor der Frage user740006 | 2011-12-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Richtig. Dies ist mehr idiomatically geschrieben
Im Fall von
y
Sie, wenn Siey["ham"]["spam"]
der Schlüssel"ham"
ist eingefügt iny
wenn es nicht vorhanden ist. Der Wert zugeordnet ist, wird es eindefaultdict
in die"spam"
wird automatisch eingefügt und mit einem Wert von0
.I. e.,
y
ist eine Art "zwei-Ebenen"defaultdict
. Wenn"ham" not in y
dann bewerteny["ham"]["spam"]
ist, wiein Bezug auf die gewöhnliche
dict
.InformationsquelleAutor der Antwort Fred Foo
defaultdict
nimmt ein null-argument aufrufbar seinen Konstruktor, der aufgerufen wird, wenn der Schlüssel nicht gefunden, wie Sie ganz richtig erklärt.lambda: 0
wird natürlich immer wieder null, aber die bevorzugte Methode, dies zu tun istdefaultdict(int)
die das gleiche tun.Als für den zweiten Teil, der Autor möchte eine neue
defaultdict(int)
oder ein verschachteltes dictionary, wenn ein Schlüssel nicht gefunden wird in der top-level-Wörterbuch.InformationsquelleAutor der Antwort Triptych
Sind Sie richtig für das, was die erste tut. Für
y
erstellen Sie ein defaultdict mit Standard 0, wenn eine Taste nicht vorhanden isty
so können Sie denken, dies als ein verschachteltes dictionary. Betrachten Sie das folgende Beispiel:Erstellen einer gleichwertigen verschachtelten dictionary-Struktur ohne defaultdict müssen Sie erstellen eine innere dict für
y['k1']
und legen Sie danny['k1']['k2']
auf 0, aber defaultdict bedeutet all dies hinter den kulissen, wenn es trifft auf Schlüsseln, die es noch nicht gesehen:Die folgende Funktion kann helfen, zum spielen, um mit diesem auf einen Dolmetscher zum besseren Verständnis:
Diese zurück dict entspricht ein verschachteltes defaultdict, das ist viel einfacher zu Lesen, zum Beispiel:
InformationsquelleAutor der Antwort Andrew Clark
y = defaultdict(lambda:defaultdict(lambda:0))
hilfreich sein, wenn Sie versuchen, diese
y['a']['b'] += 1
InformationsquelleAutor der Antwort yongsun
Alle Antworten sind gut genug, noch gebe ich die Antwort hinzufügen mehr info:
"defaultdict erfordert ein argument, ist aufrufbar. Das return Ergebnis, dass das callable-Objekt ist der Standardwert, die das Wörterbuch gibt, wenn Sie versuchen, Zugriff auf das Wörterbuch, das mit einem Schlüssel nicht vorhanden ist."
Hier ist ein Beispiel
InformationsquelleAutor der Antwort Prashant Pathak