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 :

un dictionnaire de liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 136
    Par défaut un dictionnaire de liste
    Pour un projet je dois simuler la gestion de différents processus par des processeurs. Ces processus peuvent avoir une priorité qui déterminent leur ordre d'arrivée. Ces priorités peuvent ne pas être entières, j'ai donc choisi de regrouper tous les processus dans un dictionnaire où chaque priorité est une clé vers la liste de tous les processus ayant cette priorité. Je l'ai implémenté de cette manière :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fileProc = {}
     def addProc(self) :
            q = ProcessusPrio(p) #j'initialise un processus avec priorité
            if q.getPrio() in fileProc.keys : #je teste si la priorité sert déjà de clé
                fileProc[q.getPrio()] += [q] #si oui j'ajoute le processus à la liste
            else :
                fileProc[q.getPrio()] = [q] #sinon je la créé

    y a t il une solution plus condensée de le faire. J'avais pensé à :
    fileProc[q.getPrio()] = q.getPrion() in fileProc.keys and + [q] or [q]

    Mais ça me parait fumeux et même faux.

  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
    Éventuellement avec dict.get*:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fileProc = {}
    def addProc(self) :
        q = ProcessusPrio(p) #j'initialise un processus avec priorité
        # get accepte une valeur par défaut, ici une liste vide, []…
        fileProc.get(q.getPrio(), []).append(q)

    Question subsidiaire*: il sort d’où, “p”*?

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 136
    Par défaut
    le p est un processus sans priorité que je convertie en processus avec priorité, je l'ai pas mis pour alléger le code qui à l'origine donnait ça :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    FileProc = []
    fileProc = {}
    def addProc(self) :
            p = Processus()
            self.FileProc.append(p)
            q = ProcessusPrio(p)
            if q.getPrio() in fileProc.keys :
                fileProc[q.getPrio()] += [q]
            else :
                fileProc[q.getPrio()] = [q]

  4. #4
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    424
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 424
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Éventuellement avec dict.get:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fileProc = {}
    def addProc(self) :
        q = ProcessusPrio(p) #j'initialise un processus avec priorité
        # get accepte une valeur par défaut, ici une liste vide, []…
        fileProc.get(q.getPrio(), []).append(q)
    Je ne pense pas que ça marche (fileProc reste vide car get n'affecte pas fileProc).
    A mon avis, il faut utiliser setdefault

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fileProc = {}
    def addProc(self) :
        q = ProcessusPrio(p) #j'initialise un processus avec priorité
        # get accepte une valeur par défaut, ici une liste vide, []…
        fileProc.setdefault(q.getPrio(), []).append(q)

  5. #5
    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
    Hmmm…

    Où est la cave, que j’aille m’y faire oublier*?

  6. #6
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 136
    Par défaut
    Merci je vais voir ça

    j'ai un autre problème j'ai ecrit mon projet sur mac (avec komodo) et au moment de faire tourner le script j'ai ce message d'erreur dans la console : SyntaxError: Non-ASCII character '\x8f' in file projet1.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details.

    L'interpréteur n'arrive pas à lire le caractère # (pour les commentaires. Je ne comprends pas, cette erreur aurait du etre réglée avec python 3 que j'utilise. Toujours est il que je ne sais pas quel encodage utiliser pour qu'il arrive à le lire et puis aussi la ligne stipulant l'encodage doit commencer par # mais si on ne peut pas la lire .....

  7. #7
    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
    Tout d’abord, cette erreur signifie à mon avis que tu tournes en python 2.x

    Ensuite, 0x8F n’est pas # (c’est 0x23), mais un obscure caractère de contrôle Unicode –*je serais toi, je vérifierais que ce komodo n’ajoute pas des trucs bizarres à ton fichier…

    Quant à l’encodage, normalement c’est utf-8

Discussions similaires

  1. Dictionnaire de liste -> liste de dictionnaire
    Par ju_bicycle dans le forum Général Python
    Réponses: 8
    Dernier message: 01/07/2009, 12h43
  2. Encore ce dictionnaire de listes
    Par Victoria007 dans le forum Général Python
    Réponses: 10
    Dernier message: 15/05/2008, 22h39
  3. Dictionnaire de listes
    Par Victoria007 dans le forum Général Python
    Réponses: 3
    Dernier message: 05/05/2008, 15h35
  4. Dictionnaire et liste de mot
    Par cinette dans le forum Services
    Réponses: 0
    Dernier message: 30/04/2008, 18h47
  5. Problème "for" dans dictionnaire de liste
    Par Sayrus dans le forum Général Python
    Réponses: 3
    Dernier message: 15/02/2006, 16h35

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