[Python-de] dict filtern

Peter Otten __peter__ at web.de
So Apr 14 22:41:52 CEST 2013


Philipp Kraus wrote:

> Ich habe das aktuell so:
> 
>   for tablename, tabledata in x.iteritems() :
>      items = dict((contentname, contentdata) for contentname, contentdata
>      in tabledata.iteritems() if contentdata.get("kind") == "a")
> 
> damit habe in items die Elemente drin, die ich brauche. Ich übernehme aber
> damit alle Daten aus dem ursprünglichen dict (item i). Kann ich nun noch
> verschiedene Felder ausschließen? Also letztendlich so etwas
> 
> items = dict((contentname, contentdata) if not contentname in ["kind",
> "type"] for contentname, contentdata in tabledata.iteritems() if
> contentdata.get("kind") == "a") ? d.h. ich möchte aus dicts item i noch
> verschiedene Elemente entfernen

Das wird langsam unübersichtlich; ich rate dir dazu, diesen Schritt in eine 
eigene Funktion auszulagern:

def filter_data(d, excluded=frozenset(["kind", "type"])):
   return dict((k, v) for k, v in d.iteritems() if k not in excluded)

for ...
    items = dict((contentname, filter_data(contentdata)) ...
    ...



Mehr Informationen über die Mailingliste python-de