In python möchte ich ein Wörterbuch von Arrays mit der Dictionary-Methode erstellen, um standardmäßig eine leere Liste anzugeben, die dann mit Informationen gefüllt wird, z. B .:
%Vor%Aber wenn ich den obigen Code versuche, bekomme ich keine Ausnahmen, aber meine Liste endet wie folgt:
AttributeError: Das Objekt 'NoneType' hat kein Attribut 'append'
Listen haben eine Append-Methode, daher vereinfachte ich meinen Test folgendermaßen:
%Vor%Und die Ausgabe war folgende:
{0: Keine, 1: Keine, 2: Keine, 3: Keine, 4: Keine, 5: Keine, 6: Keine, 7: Keine, 8: Keine, 9: Keine}
Also meine Frage ist, warum ist dict.get (i, []) standardmäßig keine und nicht []? Dokt.get (i, list ()) hat das gleiche Problem, also bin ich ein bisschen ratlos.
Es ist nicht dict.get( i, [] )
, das None
zurückgibt, es ist append
. Wahrscheinlich möchtest du dict.setdefault(i, []).append(j)
verwenden oder einfach eine defaultdict
an erster Stelle verwenden.
So würden Sie es machen:
%Vor% Beachten Sie, dass ich dict
in d
geändert habe, weil dict
bereits etwas in Python bedeutet (Sie definieren es neu) und ich entfernte das überflüssige dict[i] =
, das die Fehlermeldung verursacht hat.
Das Problem ist, dass append
None
anstelle des Listenobjekts zurückgibt. Also
dict[i] = dict.get( i, [] ).append( j )
weist keine dict[i]
Sie können jedoch viel einfacher tun:
%Vor% .. zitieren die Dokumente für setdefault
:
Wenn sich der Schlüssel im Wörterbuch befindet, geben Sie seinen Wert zurück. Ist dies nicht der Fall, geben Sie den Schlüssel mit dem Standardwert ein und geben Sie den Standardwert
zurück
Wenn also der Schlüssel i
noch nicht vorhanden ist, erstellt er ihn und speichert den Standardwert darin. In jedem Fall gibt er den Schlüsselwert zurück - was ein Verweis auf die Liste ist, so dass Sie ihn direkt ändern können.
Tags und Links python list dictionary