Partage
  • Partager sur Facebook
  • Partager sur Twitter

Dictionnaires dans une liste

Sujet résolu
    10 janvier 2019 à 13:24:25

    Bonjour,

    voici l'énoncé où je bloque:

    Soit une structure de données comparable à la suivante:

    l = [{"City": "Bruxelles", "Country": "Belgium"}, \
        {"City": "Berlin", "Country": "Germany"}, \
        {"City": "Paris", "Country": "France"}]
    

    Écrivez une fonction get_country(l,name) qui, pour le nom d'une ville name et une structure de données l, retourne le nom du pays dans lequel la ville est localisée. La fonction retourne False si la ville n'est pas dans l.

    et voilà ma réponse

    def get_country(l,name):
        for i in l:
            for ci,co in l[i].items():
                if name==ci:
                    return co
                else:
                    return False

    Mais j'ai faux. Quelqu'un sait qu'est ce qui cloche dans mon code?

    • Partager sur Facebook
    • Partager sur Twitter
      10 janvier 2019 à 15:26:35

      La variable i n'est pas l'indice de la liste. Quand tu utilises une boucle for comme ça, i à pour valeur chaque élément dela liste.

      Ajoute un print pour voir ce que la variable contient, ça aide beaucoup à débugger.

      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

        11 janvier 2019 à 22:39:52

        Voilà, j'ai corrigé et utilisé la boucle enumerate mais j'ai une erreur:

        def get_country(l,name):
            for i, d in enumerate(l):
                for (ci,co) in d.items():
                    if name==ci:
                        return co
                    else:
                        return False
        Test échoué :
        'Germany' != False : Votre programme ne semble pas trouver le pays associé à une ville.
        • Partager sur Facebook
        • Partager sur Twitter
          12 janvier 2019 à 0:20:24

          Tu n'as pas besoin d'itérer sur les dictionnaires, ceux-ci possèdent une structure qui est toujours la même.

          Ce que tu dois faire, c'est pour chaque dictionnaire tester l'égalité entre la valeur du champ city et le nom donné en paramètre, et renvoyer la valeur du champ country en cas d'égalité.

          Aussi, il ne faut pas directement renvoyer False en cas de différence : ce n'est pas parce que la ville n'est pas trouvée dans le premier dictionnaire qu'elle n'existe pas dans un suivant.

          • Partager sur Facebook
          • Partager sur Twitter
            12 janvier 2019 à 0:35:53

            C'est tout a fait normal,quand tu fais (ci,co) ce n'est pas le city et country mais la méthode items() du dictionnaire renvoie un coulpe clé,valeur i.e "City:Bruxelles" ou "Country:Belgique".Le programme renvoie donc False car il n'y a aucune clé qui se nomme Germany ou Berlin. Tu dois revoir ta structure de donnée.

            • Partager sur Facebook
            • Partager sur Twitter

            #©je code quand je m'ennuie

              14 janvier 2019 à 12:14:26

              entwanne a écrit:

              Tu n'as pas besoin d'itérer sur les dictionnaires, ceux-ci possèdent une structure qui est toujours la même.

              Ce que tu dois faire, c'est pour chaque dictionnaire tester l'égalité entre la valeur du champ city et le nom donné en paramètre, et renvoyer la valeur du champ country en cas d'égalité.

              Aussi, il ne faut pas directement renvoyer False en cas de différence : ce n'est pas parce que la ville n'est pas trouvée dans le premier dictionnaire qu'elle n'existe pas dans un suivant.

              oui mais comment dissocier les 2 champs justement? autrement que par faire une 2ème boucle (city,country)?

              • Partager sur Facebook
              • Partager sur Twitter
                19 février 2019 à 22:05:59

                def get_country(l,name):
                    for ci,co in l.items():
                        if ci==name:
                            t==co
                    return t

                Toujours faux! :(

                ======================================================================
                ERROR: test_cases (TestQ.TestGetCountry)
                ----------------------------------------------------------------------
                Traceback (most recent call last):
                  File "./src/TestQ.py", line 28, in test_cases
                  File "/task/student/q.py", line 6, in get_country
                    for ci,co in l.items():
                AttributeError: 'list' object has no attribute 'items'
                
                ----------------------------------------------------------------------
                Ran 2 tests in 0.001s
                
                FAILED (errors=1)
                • Partager sur Facebook
                • Partager sur Twitter
                  19 février 2019 à 22:27:17

                  En effet, les listes ne possèdent pas de méthode items, c'est une méthode des dictionnaires. Mais encore une fois je ne vois pas pourquoi tu en aurais besoin.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 février 2019 à 22:39:52

                    kdo

                    def get_country(l,name):
                        for el in l:
                            if el["City"] == name:
                                return el["Country"]
                        return False



                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 février 2019 à 10:13:11

                      Écrivez une fonction get_country(l,name) qui, pour le nom d'une ville name et une structure de données l, retourne le nom du pays dans lequel la ville est localisée. La fonction retourne False si la ville n'est pas dans l.

                      C'est une aberration de retourner False. Sur le principe, get_country est censé retourner une chaîne de caractères, et donc il est possible d'en retourner une chaîne vide dans le cas où la clé de dictionnaire n'existe pas !

                      -
                      Edité par fred1599 20 février 2019 à 10:18:47

                      • 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)

                      Dictionnaires dans une liste

                      × 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