Wie filter, die ein Wörterbuch in Python?
d = {'foo': 'x',
'bar': 'y',
'zoo': 'None',
'foobar': 'None'}
Möchte ich filter alle Elemente, deren Wert 'None'
und aktualisieren Sie die foo
und bar
Elemente mit einem bestimmten Wert. Ich habe versucht:
for i in x.items():
....: if i[i] == 'None':
....: x.pop(i[0])
....: else:
....: x.update({i[0]:'updated'})
Aber es funktioniert nicht.
- Das ist nicht der richtige Weg, um eine Schleife durch ein Wörterbuch.
- Was sind i und x? Ihr Wörterbuch ist namens d....
- Es ist
'None'
oderNone
? String oder ein nonetype? - Die Verwirrung zwischen
"None"
undNone
macht diese Frage weniger nützlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht klar, was die
'None'
im Wörterbuch, das Sie geschrieben. Wenn es ein string ist, können Sie die folgenden verwenden:Wenn es
None
, ersetzen Sie einfach die Kontrolle, zum Beispiel:v is None
.None
ist nicht der einzige falsy-Wert.es ist nicht klar, wo Sie Sie bekommen Ihr
'updated'
Wert aus, aber im Allgemeinen würde es so Aussehen:in python2.7 oder neuer.
'None'
(wie derzeit geschrieben wird). Ob oder nicht, das ist bestimmt etwas, dass nur die OP erklären kann.d
ist ein gültiges Wörterbuch, ich habe keinen Grund zu denken, dass'None'
ist eigentlichNone
Etwas, wie das funktionieren sollte
.keys()
esd.keys()
ist hier erforderlich, denn es gibt eine neue Liste zurück, ansonsten würde er mit der Iteration über eine dict-das ändert sich.Könnten Sie versuchen, schriftlich eine Allgemeine filter-Funktion:
oder
dann können Sie dies tun:
Beachten Sie, dass das geschrieben wurde, um die Kompatibilität mit Python 3. Kilometerstand kann variieren.
Die kühle Sache über dieses ist, dass es ermöglicht es Ihnen, pass beliebige Lambda-Ausdrücke in filtern, anstatt hart zu codieren eine bestimmte Bedingung. Plus, es ist nicht langsamer als die anderen Lösungen hier. Außerdem, wenn Sie die erste Lösung, die ich zur Verfügung gestellt, dann können Sie die Ergebnisse Durchlaufen.