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 :

Problème avec les dico


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut Problème avec les dico
    j'ai une question simple mais qui m'intrigue depuis quelques jours :
    mon objectif c'est de faire du reporting, c'est à dire extraire le résultat de la commande "last" et ranger les éléments dans un dico : login, date de connexion, nombre de fois connecté...

    voila une partie de 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
     
    #!/usr/bin/python
    import re, os
    resultat = os.popen("last")
    connexion = {}
    for ligne in resultat:
        extraction = re.search("^([a-z]*).*[A-Z]...([A-Z]....\d*)", ligne)
        if extraction :
          login = extraction.group(1)
          date = extraction.group(2)
     
          if connexion.has_key(login) :
    	connexion[login] = connexion[login] + 1
          else :
    	connexion[login] = 1
     
          print connexion
    en effet cela marche bien, mais je comprend pas comment le dictionnaire se rempli par les logins sachant que je l'ai juste instancier au debut vide. j'ai l'impression qu'il y a quelque chose qui se passe au niveau de la methode "has_key()"

    Merci par avance,

  2. #2
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Bonsoir,

    Ce n’est pas au niveau de dict.has_key() que se situe la “magie”, mais au moment de l’assignation (connexion[login] = 1): celle-ci va créer l’entrée demandée, si elle n’existe pas déjà…

    En bonus, plutôt que ce verbeux if/else, pourquoi ne pas utiliser setdefault()*?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/python
    import re, os
    resultat = os.popen("last")
    connexion = {}
    for ligne in resultat:
        extraction = re.search("^([a-z]*).*[A-Z]...([A-Z]....\d*)", ligne)
        if extraction :
            login = extraction.group(1)
            date = extraction.group(2)
     
            connexion[login] = connexion.setdefault(login, 0) + 1
     
            print connexion
    PS*: Attention aux indentations, mieux vaut rester logique et cohérent*!

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Juste une petite note sur has_key():
    Un des changements dans Python 3 c'est dict.has_key(key) > key in dict mais de manière générale je dirais qu'il est préférable d'utiliser in dans tous les cas, lorsque c'est possible.

    @+

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Personnellement, je préfère la construction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          if login not in connexion:
               connexion[login] = 0
          connexion[login] += 1
    C'est exactement "pareil", mais je trouve que la lecture en est plus facile.

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

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir wiztricks,

    C'est bien dans ce sens que j'ai citer in:
    1) C'est lisible.
    2) C'est 'rapide'
    3) C'est universel
    4) etc, etc, etc.
    C'est votre exemple de code que j'utilise dans ce genre de cas.

    @neeoo11
    En soit c'est bien de connaître ce mécanisme interne (méthode) des dico. La solution de wiztricks est bien plus lisible non ?

    @mont29
    C'est une grande mode que de tout mettre sur une ligne (faute sans doute aux list comprehension et autre) mais n'est il pas plus lisible de rester aux bases ?

    @+

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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