Elemente in einem Python-Wörterbuch filtern, in dem Schlüssel eine bestimmte Zeichenfolge enthalten
Ich bin ein C-coder die Entwicklung etwas in python. Ich weiß wie die folgende in C (und daher in C-wie die Logik, die auf python), aber ich Frage mich, was die 'Python' Weg, es zu tun ist.
Ich habe ein dictionary d und ich würde gerne operieren auf einer Teilmenge der Elemente, nur diejenigen, die die Schlüssel (Zeichenfolge) enthält, die einen bestimmten Teilstring.
d.h. die C Logik wäre:
for key in d:
if filter_string in key:
# do something
else
# do nothing, continue
Ich mir vorstelle, die python-version wäre so etwas wie
filtered_dict = crazy_python_syntax(d, substring)
for key,value in filtered_dict.iteritems():
# do something
Habe ich gefunden, dass viele Beiträge hier bezüglich filtern Wörterbücher, konnte aber keinen finden, die sich genau dies.
Mein Wörterbuch ist nicht verschachtelt, und ich bin mit python 2.7
Kommentar zu dem Problem
InformationsquelleAutor der Frage memo | 2014-05-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie wäre es mit einem dict-comprehension:
Sehen Sie es, es sollte selbsterklärend sein, es liest sich wie Englisch ziemlich gut.
Diese syntax benötigt Python 2.7 oder höher.
In Python 3 gibt es nur
dict.Elemente()
, nichtiteritems()
so verwenden Sie:InformationsquelleAutor der Antwort Jonathon Reinhart
Gehen, für was auch immer, ist den meisten verständlich und leicht wartbar. Nur weil Sie schreiben können, in einer einzigen Zeile bedeutet nicht, dass Sie sollten. Ihre bestehende Lösung ist nah an, was ich verwenden würde, andere als würde ich in der user iteritems zu überspringen, der Wert "nachschlagen", und ich hasse verschachtelte ifs, wenn ich diese vermeiden:
Allerdings, wenn Sie realllly etwas wollen zu lassen, die Sie Durchlaufen eine gefilterte dict, dann würde ich nicht tun die zwei-Schritt-Prozess des Aufbaus der gefilterten dict und dann Durchlaufen, sondern verwenden Sie einen generator, denn was ist mehr pythonic (und genial) als ein generator?
Zunächst erstellen wir unseren generator, und ein guter Entwurf vor, dass wir es Abstrakt genug, um wiederverwendbare:
Und dann können wir den generator um Ihr problem zu lösen schön und sauber mit einfachen, verständlichen code:
Kurz: Generatoren sind genial.
InformationsquelleAutor der Antwort Brendan F
InformationsquelleAutor der Antwort jspurim
Jonathon gab Sie ein Ansatz, der dict-Verstehens in seine Antwort. Hier ist ein Ansatz, der sich Ihrer etwas tun Teil.
Wenn Sie wollen, etwas zu tun mit den Werten des Wörterbuchs, die Sie nicht brauchen ein Wörterbuch Verständnis an alle:
Ich bin mit
iteritems(
), da Sie tagged Ihre Frage mit" python-2.7Nun wird das Ergebnis in einer Liste mit
some_function
für jedes Schlüssel/Wert-paar des Wörterbuchs, das hatfoo
in seinem key.Wenn Sie nur wollen, um sich mit den Werten und ignorieren Sie die Tasten,, ändern Sie einfach die Liste Verständnis:
some_function
kann jede aufrufbar, so dass ein lambda würde auch funktionieren:Die innere Liste ist eigentlich nicht erforderlich, so können Sie ein generator-Ausdruck zur Karte:
InformationsquelleAutor der Antwort Burhan Khalid
Können Sie die integrierte-in Filterfunktion zu filtern, Wörterbücher, Listen, etc. basierend auf bestimmten Bedingungen.
Der Vorteil ist, dass Sie können es verwenden für verschiedene Daten-Strukturen.
InformationsquelleAutor der Antwort Pulkit