[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