Partage
  • Partager sur Facebook
  • Partager sur Twitter

Filtrer une liste de dictionnaires

Sujet résolu
    17 mai 2022 à 19:50:23

    Bonjour,

    J'essaye actuellement de filtrer une liste de dictionnaires d'un fichier json depuis un fichier python.

    Voici la liste :

    {
        "articles": [
            {
                "type": "vegetable",
                "name": "Broccoli",
                "price": 2.14
            },
            {
                "type": "vegetable",
                "name": "fennel",
                "price": 2.12
            },
            {
                "type": "fruit",
                "name": "Lemon",
                "price": 3.27
            },
            {
                "type": "fruit",
                "name": "Lychee",
                "price": 9.45
            },
            {
                "type": "fruit",
                "name": "Melon",
                "price": 4.02
            },
            {
                "type": "fruit",
                "name": "Orange",
                "price": 2.34
            },
            {
                "type": "vegetable",
                "name": "Onion",
                "price": 1.03
            },
            {
                "type": "fruit",
                "name": "Raspberry",
                "price": 8.45
            },
            {
                "type": "vegetable",
                "name": "Spinach",
                "price": 1.72
            },
            {
                "type": "fruit",
                "name": "Strawberry",
                "price": 7.12
            }     
        ]
    }
    


    Ce que je veux faire c'est afficher cette liste avec uniquement les type = fruit.

    Pour le moment j'arrive à récupérer le fichier json et à l'afficher, il me manque plus qu'à filtrer.

    import json
    op = open('test.json')
    test = json.load(op)
    
    for i in test ['articles']:
        print (i)



    Merci de votre aide ^^

    -
    Edité par begula 17 mai 2022 à 19:55:43

    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2022 à 20:13:22

      for i in test['articles']:
         if i['type'] == 'fruit': 
             print(i)
      C'était pourtant pas dur ...

      -
      Edité par Nephthys 17 mai 2022 à 20:13:49

      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2022 à 20:18:58

        Nephthys a écrit:

        for i in test['articles']:
           if i['type'] == 'fruit': 
               print(i)

        C'était pourtant pas dur ...

        -
        Edité par Nephthys il y a 3 minutes


        J'avais pensé à ça mais je voulais utiliser la fonction filter() que j'avais vu en js. Il existe l'équivalent en python ?

        Après si y'a pas d'équivalent c'est pas très grave je voulais juste rester proche de mon code js de base.

        -
        Edité par begula 17 mai 2022 à 20:24:48

        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2022 à 21:23:45

          articles = data["articles"]
          
          # List comprehension:
          results = [item for item in articles if article["type"] == "fruit"]
          
          # Filter:
          results = filter(lambda item: item["type"] == "fruit", articles)
          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2022 à 7:58:29

            Avec filter comme mon VDD le montre très bien, ça fonctionne... suffit juste de lire la documentation. On peut retirer la partie lambda des fois difficile à appréhender pour le débutant dans le langage afin de rendre plus lisible la création de fonction et utiliser def à la place (peut-être moins étranger pour toi).

            def is_fruit(article: dict) -> bool:
                return article["type"] == "fruit"


            Si tu as la liste d'articles, c'est assez simple, filter prend en paramètre la fonction de filtrage et l'itérable sur lequel on applique le filtre.

            articles = ... # ta liste d'articles
            fruits = [] # ta liste de fruits nouvellement créée
            
            for article in filter(is_fruit, articles):
                fruits.append(article)
            
            print(fruits)

            Ça permet avec des noms de variables plus tourné vers le "métier" de mieux se rapprocher de sa problématique et de la manière dont on a déterminé la solution.

            P.S filter est une solution, mais il y en a d'autres, d'ailleurs dans la documentation de filter, on en donne un équivalent.

            • Partager sur Facebook
            • Partager sur Twitter

            Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
            La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

              18 mai 2022 à 16:07:05

              Merci pour vos réponses ^^
              • Partager sur Facebook
              • Partager sur Twitter

              Filtrer une liste de dictionnaires

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown