Ich habe eine Liste solcher Diktate:
[{'value': 'apple', 'blah': 2},
{'value': 'banana', 'blah': 3} ,
{'value': 'cars', 'blah': 4}]
Ich will ['apple', 'banana', 'cars']
Was ist der beste Weg, dies zu tun?
python
list
dictionary
SuperString
quelle
quelle
Hier ist eine andere Möglichkeit, dies mit den Funktionen map () und lambda zu tun:
wo l ist die Liste. Ich sehe diesen Weg "sexiest", aber ich würde es mit dem Listenverständnis tun.
Update: Falls dieser 'Wert' als Schlüssel fehlt, verwenden Sie:
Update: Ich bin auch kein großer Fan von Lambdas, ich nenne lieber Dinge ... so würde ich es in diesem Sinne machen:
Ich würde sogar noch weiter gehen und eine einzige Funktion erstellen, die explizit sagt, was ich erreichen möchte:
map
Verwenden Sielist
in Python 3, da ein Iterator zurückgegeben wird , um eine Liste zurückzugeben, zlist(map(operator.itemgetter('value'), l))
.quelle
map
möchtenoperator.itemgetter('value')
, verwenden Sie nicht alambda
.quelle
getkey
... meinst dud.get('value')
? Das wäre dasselbe wie @ isbadawis 2. Listenverständnis, nicht das von Michal.Für einen sehr einfachen Fall wie diesen ist ein Verständnis wie in Ismail Badawis Antwort definitiv der richtige Weg.
Wenn die Dinge jedoch komplizierter werden und Sie mit dem Schreiben von Mehrklauseln oder verschachtelten Verständnissen mit komplexen Ausdrücken beginnen müssen, sollten Sie nach anderen Alternativen suchen. Es gibt verschiedene (quasi) Standardmethoden zum Festlegen von XPath-Suchvorgängen in verschachtelten Diktat- und Listenstrukturen wie JSONPath, DPath und KVC. Und es gibt nette Bibliotheken auf PyPI für sie.
Hier ist ein Beispiel mit der genannten Bibliothek
dpath
, das zeigt, wie es etwas etwas komplizierteres vereinfachen kann:Oder mit
jsonpath-ng
:Dieser sieht auf den ersten Blick möglicherweise nicht ganz so einfach aus, da
find
Übereinstimmungsobjekte zurückgegeben werden, die alle Arten von Dingen außer nur dem übereinstimmenden Wert enthalten, z. B. einen Pfad direkt zu jedem Element. Bei komplexeren Ausdrücken kann es jedoch einen großen Unterschied machen , einen Pfad wie'*.[*].value'
anstelle einer Verständnisklausel für jeden anzugeben*
. Außerdem ist JSONPath eine sprachunabhängige Spezifikation, und es gibt sogar Online-Tester , die beim Debuggen sehr praktisch sein können.quelle
Ich denke, so einfach wie unten würde Ihnen geben, wonach Sie suchen.
Sie können dies auch mit einer Kombination aus
map
und tun,lambda
aber das Listenverständnis sieht eleganter und pythonischer aus.Für eine kleinere Eingabeliste ist das Verständnis ein guter Weg, aber wenn die Eingabe wirklich groß ist, sind Generatoren meiner Meinung nach der ideale Weg.
Hier ist ein Vergleich aller möglichen Lösungen für größere Eingaben
Wie Sie sehen können, sind Generatoren im Vergleich zu den anderen eine bessere Lösung. Die Karte ist im Vergleich zum Generator auch langsamer, da ich es dem OP überlassen werde, dies herauszufinden.
quelle
Folge dem Beispiel --
quelle
Schlüsselwerte aus der Liste der Wörterbücher in Python abrufen?
Ex:
für d in Daten:
Ausgabe:
quelle
Ein sehr einfacher Weg, dies zu tun, ist:
Ausgabe:
quelle