Partage
  • Partager sur Facebook
  • Partager sur Twitter

Obtenir une liste de dictionnaire

Transformer une liste de liste en liste de dictionnaire

    13 août 2015 à 11:32:23

    Bonjour,

    Je me permets de vous contacter car j'ai un petit souci avec la gestion des dictionnaires. En fait, j'ai fait une liste de liste et j'aimerais avoir une liste de dictionnaires, ce qui me permettra par la suite d'accéder à mes valeurs plus facilement. Voici mon code : 

    list_erratum_rhel = []
         for channel in list_channel:
             list_erratum_rhel.extend(
                     [
                         erratum['id'],
                         erratum['advisory_synopsis'],
                         erratum['advisory_name'],
                         erratum['update_date']
                         ] for erratum in client.channel.software.listErrata(key, channel, date_6month.isoformat(), date_today.isoformat())
                         if 'Critical' in erratum['advisory_synopsis'])
    
         erratas = []
         for item in list_erratum_rhel:
             if item not in erratas:
                 erratas.append(item)
    
         for errata in erratas:
             packages = [(x['id'], x['name']) for x in client.errata.listPackages(key, errata[2])]
             errata.append(packages)
    
             systems = [(x['name']) for x in client.errata.listAffectedSystems(key, errata[2])]
             errata.append(systems)

    pprint(erratas[0])

     En sortie voici ce que cela me donne :

    [37256,
     'Critical: firefox security update',
     'RHSA-2015:1207',
     '2015-07-02 06:00:00',
     [(151470, 'firefox'),
      (151471, 'firefox'),
      (151487, 'firefox'),
      (151530, 'firefox'),
      (151553, 'firefox'),
      (151561, 'firefox')],
     ['toutonkamon',
      'toto',
      'tata',
      'titi',
      'teoe',
      'ikito',
      'lolo']]

    Ici c'est le format [ RHSA, [packageId, packageName], [systems]]

    Moi j'amerais avoir du format : [ {"RHSA": ..., "packageId":..., "packageName":"firefox", "systems": [name1, ...etc],}]

    Est ce possible? Merci par avance



    • Partager sur Facebook
    • Partager sur Twitter
      13 août 2015 à 14:15:37

      Quelqu'un peut me dire comment je dois m'y prendre? Je sais que pour ajouter un dico dans une liste on utilise le mot clé "append". Mais dans mon cas comment je peux procéder sachant que j'ai déja une liste de faite avec les erratas
      • Partager sur Facebook
      • Partager sur Twitter
        13 août 2015 à 15:08:17

        Pourrais-tu donner un exemple concret de ce que tu souhaites avoir réellement. Par exemple concret, je ne parle pas de ça: [ {"RHSA": ..., "packageId":..., "packageName":"firefox", "systems": [name1, ...etc],}] mais d'un vrai exemple (avec de vraies données) sur la façon dont tu verrais tes données organisées (avec plus d'une entrée errata si possible). Il n'y a qu'en visualisant bien le format de tes données que tu pourra réaliser le code qui te donnera le résultat attendue (je dis ça parce que ton exemple cité plus haut me paraît obscur ;)).

        Mais je ne comprends pas ce que tu n'arrive pas à faire. Si tu sais construire/modifier/accéder aux éléments d'un dictionnaire et si tu sais ajouter un élément dans une liste, alors tu peux théoriquement construire la structure de tes données :o? Voici tout de même quelques rappels:

        #Pour les listes
        
        #Création d'une liste vide: les crochets
        lst = []
        
        #Ajout d'un élément: méthode append
        lst.append(3)
        
        #Les listes sont indexables. On peut donc les manipuler par leurs indices
        lst[0]
        
        #Et les modifier en conséquence
        lst[0] = 8
        
        #Si tu fais une liste de listes, c'est la même chose
        lst = [[1, 2], [3, 4]]
        
        #Pour ajouter un élément à une sous-liste, on récupère l'indice
        #Ici, lst[1] correspond à la liste [3, 4]
        lst[1].append(5)
        
        
        #Pour les dicos
        
        #Création d'un dico vide: les accolades
        dico = {}
        
        #Ajout d'un élément: le couple clé:valeur
        #Ici j'ajoute à la clé "Hello" la valeur 33
        dico["Hello"] = 33
        
        #Les clés doivent obligatoirement être des objets immuables
        #immuables: chaines de caractères, nombres, tuples, ...
        #muables (donc pas acceptés): liste, dico, set, ...
        
        #Pour modifier un élément: on utilise la clé
        #Ici je donne la valeur 34 à la clé "Hello"
        dico["Hello"] = 34
        
        
        #TOUT LE RESTE EST UNE COMBINAISON DE CES LIGNES


        Dans tous les cas ta structure sera légèrement complexe pour accéder à tes données. La vraie question est: quelle forme doivent avoir tes données en sortie?

        • Partager sur Facebook
        • Partager sur Twitter
        Précepte: Le mieux est l'ennemi du bien
          13 août 2015 à 15:32:08

          Olygrim a écrit:

          Pourrais-tu donner un exemple concret de ce que tu souhaites avoir réellement. Par exemple concret, je ne parle pas de ça: [ {"RHSA": ..., "packageId":..., "packageName":"firefox", "systems": [name1, ...etc],}] mais d'un vrai exemple (avec de vraies données) sur la façon dont tu verrais tes données organisées (avec plus d'une entrée errata si possible). Il n'y a qu'en visualisant bien le format de tes données que tu pourra réaliser le code qui te donnera le résultat attendue (je dis ça parce que ton exemple cité plus haut me paraît obscur ;)).

          Mais je ne comprends pas ce que tu n'arrive pas à faire. Si tu sais construire/modifier/accéder aux éléments d'un dictionnaire et si tu sais ajouter un élément dans une liste, alors tu peux théoriquement construire la structure de tes données :o? Voici tout de même quelques rappels:


          Dans tous les cas ta structure sera légèrement complexe pour accéder à tes données. La vraie question est: quelle forme doivent avoir tes données en sortie?

          Pour répondre à ta question, je souhaiterais avoir un format de sortie comme celui ci :

          [{"RHSA":37256,
           'Critical: firefox security update',
           'RHSA-2015:1207',
           '2015-07-02 06:00:00',
           "packageId":151470, "packageName":'firefox',
           "packageId":151471, "packageName":'firefox',
           "packageId":151487, "packageName":'firefox',
           "packageId":151530, "packageName":'firefox',
           "packageId":151553, "packageName":'firefox',
           "packageId":151561, "packageName":'firefox'],
           "systems":['toutonkamon',
            'toto',
            'tata',
            'titi',
            'teoe',
            'ikito',
            'lolo']}],

          Plutot comme ceci :

          {"RHSA":37256,
           'Critical: firefox security update',
           'RHSA-2015:1207',
           '2015-07-02 06:00:00',
           "packageId":151470, "packageName":'firefox',
           "packageId":151471, "packageName":'firefox',
           "packageId":151487, "packageName":'firefox',
           "packageId":151530, "packageName":'firefox',
           "packageId":151553, "packageName":'firefox',
           "packageId":151561, "packageName":'firefox',
           "systems":['toutonkamon',
            'toto',
            'tata',
            'titi',
            'teoe',
            'ikito',
            'lolo']}],
          [{"RHSA":36732,
           'Critical: java-1.6.0-ibm security update',
           'RHSA-2015:1006',
           '2015-05-13 06:00:00',
           "package_id":144078, "package_name":'java-1.6.0-ibm-accessibility',
            "package_id":144079, "package_name":'java-1.6.0-ibm-jdbc',
            "package_id":144081, "package_name":'java-1.6.0-ibm-jdbc',
            "package_id":144083, "package_name":'java-1.6.0-ibm',
            "package_id":144084, "package_name":'java-1.6.0-ibm-plugin',
            "package_id":144085, "package_name":'java-1.6.0-ibm-javacomm',
            "package_id":144088, "package_name":'java-1.6.0-ibm-devel',
            "package_id":144089, "package_name":'java-1.6.0-ibm-src',
            "package_id":144091, "package_name":'java-1.6.0-ibm-demo',
            "package_id":144097, "package_name":'java-1.6.0-ibm-src',
            "package_id":144099, "package_name":'java-1.6.0-ibm',
            "package_id":144100, "package_name":'java-1.6.0-ibm-javacomm',
            "package_id":144102, "package_name":'java-1.6.0-ibm-plugin',
            "package_id":144103, "package_name":'java-1.6.0-ibm-devel',
            "package_id":144104, "package_name":'java-1.6.0-ibm-demo',
            "package_id":144327, "package_name":'java-1.6.0-ibm-src',
            "package_id":144328, "package_name":'java-1.6.0-ibm-demo',
            "package_id":144329, "package_name":'java-1.6.0-ibm-javacomm',
            "package_id":144330, "package_name":'java-1.6.0-ibm-jdbc',
            "package_id":144331, "package_name":'java-1.6.0-ibm-plugin',
            "package_id":144332, "package_name":'java-1.6.0-ibm-devel',
            "package_id":144333, "package_name":'java-1.6.0-ibm',
            "package_id":144334, "package_name":'java-1.6.0-ibm-devel',
           "systems":[]}]
          

          Petite modification :)





          -
          Edité par Taylor08 13 août 2015 à 16:00:09

          • Partager sur Facebook
          • Partager sur Twitter
            13 août 2015 à 16:14:23

            C'est bien ce qui me semblait. Dans un dictionnaire, il ne peux pas y avoir deux fois la même clé. Autrement dit, il ne peux pas y avoir 2 fois la clé package_id ou package_name. Il faut regrouper ces 2 éléments dans un conteneur (tuple, liste, set, ...). Ce que tu associe à ta clé "RHSA" c'est un tuple de 4 éléments?

            • Partager sur Facebook
            • Partager sur Twitter
            Précepte: Le mieux est l'ennemi du bien
              13 août 2015 à 16:23:28

              Olygrim a écrit:

              C'est bien ce qui me semblait. Dans un dictionnaire, il ne peux pas y avoir deux fois la même clé. Autrement dit, il ne peux pas y avoir 2 fois la clé package_id ou package_name. Il faut regrouper ces 2 éléments dans un conteneur (tuple, liste, set, ...). Ce que tu associe à ta clé "RHSA" c'est un tuple de 4 éléments?


              Oui c'est un tuple de 4 élements : id, advisory_synopsis, advisory_name, update_date
              • Partager sur Facebook
              • Partager sur Twitter

              Obtenir une liste de dictionnaire

              × 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