Python: Die Verwendung der Dictionary Methode get, um standardmäßig eine leere Liste zurückzugeben, gibt None stattdessen zurück!

8

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.

    
Danielb 24.04.2011, 17:43
quelle

5 Antworten

15

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.

    
Gabe 24.04.2011, 17:47
quelle
14

Um das zu lösen, musst du Pythons defaultdict verwenden.

Ссылка

%Vor%     
Steve Mayne 24.04.2011 17:46
quelle
3

Das Problem ist, dass append None anstelle des Listenobjekts zurückgibt. Also

dict[i] = dict.get( i, [] ).append( j ) weist keine dict[i]

zu

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.

    
Alexander Gessler 24.04.2011 17:46
quelle
2

append gibt keine Liste zurück. Er hängt den Wert an die Liste an und gibt None zurück.

Statt dessen:

%Vor%

Sie könnten dies tun:

%Vor%     
eduffy 24.04.2011 17:46
quelle
0

Eine Alternative, die die get -Methode verwendet, indem sie die Listenaddition ausnutzt.

%Vor%     
yardsale8 21.05.2013 16:10
quelle

Tags und Links