Einträge aus dictionary entfernen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Serpens66
User
Beiträge: 259
Registriert: Montag 15. Dezember 2014, 00:31

Ich möchte aus einem dictionary alle einträge löschen, dessen Value unwahr ist. Bisher ist folgendes meine Lösung, aber da ich ja gehöhrt habe, dass deepcopy nur in ausnahmefällen verwendet werden sollte, gibt es bestimmt einen viel besseren weg? :) (deepcopy wird verwendet, da ich ja nichts in einem dictionary löschen kann, über welches gerade iteriert wird)

Code: Alles auswählen

        params = ["spam":"","eggs":1,"appel":0]
        newparams = deepcopy(params)
        for key,value in params.items():
            if not value: # unwahre (dazu geört auch "") eintraege löschen
                del newparams[key]
BlackJack

@Serpens66: Erstmal: `deepcopy()` ist hier völlig unnötig weil für diese Operation eine flache Kopie ausreicht.

Das einfachste ist nichts zu löschen sondern einfach ein neues Wörterbuch zu erstellen, das ist ein Einzeiler:

Code: Alles auswählen

new_params = dict((k, v) for k, v in params.items() if v)
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Serpens66
Mit dictionary comprehension

Code: Alles auswählen

>>> kv = [('spam', ''), ('eggs', 1), ('appel', 0)]
>>> {key: value for key, value in kv if value}
{'eggs': 1}
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Serpens66
User
Beiträge: 259
Registriert: Montag 15. Dezember 2014, 00:31

dankeschön :)

ps: in meinem post soll es natürlich ein dictionary sein, weshalb die [] klammern durch {} zu ersetzen sind ^^
Antworten