Wenn der Wert None ist, möchte ich ihn in "" (leere Zeichenfolge) ändern.
Ich fange so an, aber ich vergesse:
for k, v in mydict.items():
if v is None:
... right?
python
dictionary
TIMEX
quelle
quelle
mydict[k] = ''
- Ihr Beispiel aktualisiert denk
Index auf ein unveränderliches Objekt''
. Alsok
würde danach auf ein ganz anderes Objekt verweisen alsv
. Würde dies denk
Index auf irgendeine Weise mutieren, die Probleme mit verursachen könnte.iteritems()
?dict.iteritems
..items
Schleifen beim Hinzufügen / Entfernen von Schlüsseln umsichtig ist. Ich kenne die Implementierungsdetails vondict_items
Objekten nicht, aber es scheint, dass Sie immer noch Probleme haben, diese in python3.x zu durchlaufen, wenn Sie Schlüssel hinzufügen / löschen. In diesem Fall ist es wahrscheinlich am sichersten, eine Liste der Schlüssel zufor k in list(mydict): v = mydict[k]; ...
Sie können ein Diktatverständnis nur für die Elemente erstellen, deren Werte Keine sind, und dann wieder auf das Original aktualisieren:
tmp = dict((k,"") for k,v in mydict.iteritems() if v is None) mydict.update(tmp)
Update - hat einige Leistungstests durchgeführt
Nun, nachdem Sie Diktate von 100 bis 10.000 Elementen mit unterschiedlichem Prozentsatz von None-Werten ausprobiert haben, ist die Leistung von Alex 'Lösung auf der ganzen Linie ungefähr doppelt so schnell wie die dieser Lösung.
quelle
Das Verständnis ist normalerweise schneller, und dies hat den Vorteil, dass es
mydict
während der Iteration nicht bearbeitet wird:mydict = dict((k, v if v else '') for k, v in mydict.items())
quelle
.items()
es keine Rolle (für Python2), ob Sie Änderungen vornehmen,mydict
da sich die Liste, die.items()
zurückgegeben wird, nicht ändert, selbst wenn Sie Schlüssel vonmydict
if v is not None
stattdessen habenif v
(lesen Sie die Frage erneut). Gesamtübersicht: -1''
. Ich würde vorschlagen,if v
durch zu ersetzenif v is None
, dies ist auch PEP 8-konformer: python.org/dev/peps/pep-0008/#programming-recommendations