IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Gestion des namedtuple


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 51
    Points
    51
    Par défaut Gestion des namedtuple
    Bonjour,

    Je me permets de vous contacter car j'ai un petit souci avec les namedtuples.

    En effet je chercher à créer deux listes qui permettront d'effectuer une comparaison sur un élement commun à ces deux listes.

    Problème: j'ai des erreurs de syntaxe que je ne vois pas forcément. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
        list_channel =[channel['label'] for channel in client.channel.listRedHatChannels(key)]
     
        Errata = namedtuple('Errata', ['id', 'advisory_synopsis', 'advisory_name', 'update_date','packages'])
     
        Package = namedtuple('Package',['id','name','version','release'])
     
        list_erratum_rhel = { 
            Errata(
                erratum['id'],
                erratum['advisory_synopsis'],
                erratum['advisory_name'],
                erratum['update_date']
                {
                    Package(
                        package['id'],
                        package['name'],
                        package['version'],
                        package['release']
                        )
                    for package in client.errata.listPackages(key, erratum['advisory_name'])
                }
                )
            for channel in list_channel
            for erratum in client.channel.software.listErrata(key, channel, date_6month.isoformat(), date_today.isoformat()) if 'Critical' in erratum['advisory_synopsis']}
     
        pprint(set_erratum)
    Est ce possible?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Le message d'erreur est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> foo = namedtuple('foo', 'id name')
    >>> z = foo(1, 'toto')
    >>> z
    foo(id=1, name='toto')
    >>> z['id']
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: tuple indices must be integers, not str
    ca veut juste dire qu'un namedtuple reste un tuple!!
    Si vous voulez accéder aux éléments de ce tuple là par "nom", il faut utiliser la même notation que pour les attributs d'une classe:
    Ceci dit, namedtuple étant tuple, les appels de fonctions se simplifient aussi via "*":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> def foo(id, name):
    ...     print(id, name)
    ...
    >>> foo(*z)
    1 toto
    >>>
    note: et jouer avec la chose à la console Python pour voir comment ils fonctionnent est un réflexe à acquérir (plutôt que de poster et attendre....)

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 51
    Points
    51
    Par défaut
    Wiztricks, Merci pour l'erreur car de mon côté je n'ai pas cette erreur. Mais plutot " invalid syntax"

    C'est quelque chose que j'expérimente le namedtuple, car avant je le faisais avec des index ... bref du code imbuvable. On m'a soumis cette solution de namedtuple que j'essaie de faire fonctionner dans mon cas ici présent.

    Donc d'après tes explications, serait plutôt et ainsi de suite ?

    Mon but serait d'avoir un rendu comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    [Errata(37256,
                      'Critical: firefox security update',
                      'RHSA-2015:1207', '2015-07-02 06:00:00',
                      {Package(151470, 'firefox', '38.1.0', '1.el5_11'),
                       Package(151471, 'firefox', '38.1.0', '1.el5_11'),
                       Package(151487, 'firefox', '38.1.0', '1.el6_6'),
                       Package(151530, 'firefox', '38.1.0', '1.el7_1'),
                       Package(151553, 'firefox', '38.1.0', '1.el6_6'),
                       Package(151561, 'firefox', '38.1.0', '1.el7_1')}),
               Errata(36749,
                      'Critical: firefox security update',
                      'RHSA-2015:0988', '2015-05-12 06:00:00',
                       {Package(144073, 'firefox', '38.0', '4.el5_11'),
                        Package(144074, 'firefox', '38.0', '4.el5_11'),
                        Package(144121, 'firefox', '38.0', '4.el6_6'),
                        Package(144258, 'firefox', '38.0', '3.el7_1'),
                        Package(144271, 'firefox', '38.0', '4.el6_6'),
                        Package(144322, 'firefox', '38.0', '3.el7_1')})
              ]

Discussions similaires

  1. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01
  2. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo