3
votes

obtenir une liste de valeurs spécifiques à partir d'une liste de dictionnaires sans utiliser de boucles for ou si des conditions uniquement si nécessaire

Disons que j'ai une liste de dictionnaires.

listOfNames = ["Joel", "Rachel"]

Je veux obtenir une liste de noms dont l'âge est de 10 ans. La sortie ressemblerait donc à ceci.

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

Y a-t-il un moyen de faire cela sans utiliser de boucles for ou if. J'ai essayé d'utiliser la fonction Lambda mais en vain.


0 commentaires

4 Réponses :


4
votes

Y a-t-il un moyen de faire cela sans utiliser de boucles for ou de conditions if

Non, il n'y en a pas!

Utilisez une boucle. C'est inévitable à certains niveaux. En utilisant une compréhension de liste:

res = [d['name'] for d in listOfDict if d['Age'] == '10']

0 commentaires

1
votes

Cela fonctionne.

Utilisation de 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)


0 commentaires

1
votes

Pas de pour boucles ou if conditions utilisant pandas.DataFrame :

['Joel', 'Rachel']

OUTPUT

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


1 commentaires

L'indexation chaînée est explicitement déconseillée dans la documentation, utilisez plutôt df.loc [df ['Age'] == '10', 'name']]. Tolist () .



1
votes

Il existe un moyen d'utiliser les fonctions lambda, avec map et filter pour obtenir le résultat souhaité sans utiliser ni pour boucle ou si condition, mais le code sera un peu difficile à lire:

['Joel', 'Rachel']

Résultat:

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)


2 commentaires

Non seulement difficile à lire, mais aussi moins efficace. Il faut noter que se débarrasser des instructions for / si ne conduit pas nécessairement à un code optimisé.


@jpp Je suis totalement d'accord avec vous, mais la question de l'OP était de trouver un moyen d'obtenir le résultat souhaité sans utiliser les conditions for ou if .