Angenommen, ich habe eine Liste mit Wörterbüchern.

listOfDict = [{"name": "Joel","Age": "10","Grade": "A"},{"name": "Adam","Age": "11","Grade": "B"},{"name": "Rachel","Age": "10","Grade": "B"}]

Ich möchte eine Liste mit Namen erhalten, deren Alter 10 Jahre beträgt. Die Ausgabe würde also so aussehen.

listOfNames = ["Joel", "Rachel"]

Gibt es eine Möglichkeit, dies zu tun, ohne for-Schleifen zu verwenden oder wenn Bedingungen. Ich habe versucht, die Lambda-Funktion zu verwenden, aber ohne Erfolg.

3
AxlTylerThomas 17 Jän. 2019 im 20:51

4 Antworten

Beste Antwort

Gibt es eine Möglichkeit, dies zu tun, ohne for-Schleifen zu verwenden oder wenn Bedingungen

Nein, gibt es nicht!

Verwenden Sie eine Schleife. Es ist auf einigen Ebenen unvermeidlich. Verwenden eines Listenverständnisses:

res = [d['name'] for d in listOfDict if d['Age'] == '10']
4
jpp 17 Jän. 2019 im 17:54

Keine for Schleifen oder if Bedingungen unter Verwendung von pandas.DataFrame:

import pandas as pd
df=pd.DataFrame.from_dict(listOfDict)
result=df[df['Age']=='10']['name'].tolist()

AUSGABE

['Joel', 'Rachel']
1
Ricky Kim 17 Jän. 2019 im 18:11

Das funktioniert.

Verwenden von Lambda:

result = list(map(lambda x: x['name'] if x['Age'] == "10" else None, listOfDict ))
result = [x for x in result if x is not None]
print(result)
1
devkingsejong 17 Jän. 2019 im 18:01

Es gibt eine Möglichkeit , Lambda-Funktionen zusammen mit map und filter zu verwenden, um das gewünschte Ergebnis zu erzielen, ohne die for -Schleife oder die if -Bedingung zu verwenden , aber der Code wird etwas schwer zu lesen sein:

listOfDict = [{"name": "Joel","Age": "10","Grade": "A"},{"name": "Adam","Age": "11","Grade": "B"},{"name": "Rachel","Age": "10","Grade": "B"}]

listOfNames = list(map(lambda elem: elem['name'], list(filter(lambda elem: elem['Age']=="10",listOfDict))))

print(listOfNames)

Ergebnis:

['Joel', 'Rachel']
1
Vasilis G. 17 Jän. 2019 im 18:35