[Python-de] dict filtern

Peter Otten __peter__ at web.de
So Apr 14 20:29:51 CEST 2013


Philipp Kraus wrote:

> Ich stehe aktuell auf dem Eintrag data1, also auf meiner äußeren
> Schleife und nun will ich wissen, ob sich in meinen data1.values
> ein Eintrag findet, der ein kind == a enthält, wenn ja möchte ich alle
> diese Einträge haben und mit diesen etwas machen, in etwas so:
> 
> for k,v in x.iterateitems() :
> 
>       list = []
>       for a,b in v.iterateitems() :
>             if b.has_key("kind") and b["kind"] == "a" :
>                  list.append(dict(a,b))
>       
>       if list :
>           do_something(list)

Das ist äquivalent zu

for k, v in x.iteritems():
    items = [{a: b} for a, b in v.iteritems() if b.get("kind") == "a"]
    if items:
        do_something(items)

"list" ist ein built-in, deshalb verwende ich "items" als Name.
Ich sehe allerdings nicht, warum du dicts mit einem einzigen Eintrag 
verwendest; ein einziges dict statt der list erscheint mir sinnvoller:

for k, v in x.iteritems():
    items = {a: b for a, b in v.iteritems() if b.get("kind") == "a"}
    if items:
        do_something(items)

Die dict-comprehension {...} erfordert Python 2.7, für ältere Versionen 
verfüttert man eine generator expression:

    items = dict((a, b) for a, b in v.iteritems() if b.get("kind") == "a")



Mehr Informationen über die Mailingliste python-de