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 utilisation dictionnaire


Sujet :

Python

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Problème avec utilisation dictionnaire
    Bonjour,

    J'ai un souci avec l'utilisation du dictionnaire. Les valeurs que je stocke dans le dictionnaire s'écrasent à chaque itération. Le but est de stocker l'identifiant du film comme clé dans le dictionnaire et la valeur comme étant la note accordée au film par l'utilisateur.

    Voici la classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class User:
     
        # -------------------------------------------------------------------------
        user_id: int
        note_film: Dict[int,float]   
        # -------------------------------------------------------------------------
        def __init__(self, user_id: int, note_film: Dict[int, float]):
     
            self.user_id = user_id
            self.note_film = note_film
        # -------------------------------------------------------------------------
        def imprimer_users(self):
            print(self.user_id)
            print(self.note_film)
    Le code permettant d'afficher :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    #####Ouverture du fichier#####
     
    f = open ('ratings_5users.csv')
    fichier_ratings = csv.reader(f)
     
     
    #####Création de différentes variables#####
     
    #Liste qui contiendra l'ensemble des utilisateurs provenant du fichier ratings.csv
    tous_les_users = [] 
     
    user_id = int 
    movie_id = int 
    note = float
     
    #Permet de savoir à quel utilisateur nous sommes dans le fichier
    indice = 1 
     
    #Dictionnaire qui contiendra l'ensemble des ids des films et des notes attribuées à ces films par un utilisateur
    ratings: Dict[int,float] 
    ratings ={}
    #####Lecture des éléments####
     
    for ligne in fichier_ratings:
     
        user_id = ligne[0] #Récupère les ids users
        movie_id = ligne[1] #Récupère les ids des films
        note = ligne[2] # Récupère la note attribué par cet utilisateur à ce film
     
        #On regarde la note suivante du même utilisateur que précédemment
        if int(user_id) == indice: 
     
            ratings[int(movie_id)] = float(note)
     
        #On passe à l'utilisateur suivant dans le fichier
        else: 
     
            #Encoder les infos relatives à l'utilisateur précédent dont la liste de notes est terminée
            #On retire 1 au user_id lors de la création de l'utilisateur car on vient de passer à l'utilisateur suivant
            user = User(int(user_id)-1,ratings)
     
            #On ajoute cet utilisateur à la liste de tous les utilisateurs
            tous_les_users.append(user) 
     
            #On efface ce qui est contenu dans le dictionnaire afin de le remplir par les notes de l'utilisateur suivant
            ratings.clear() 
     
            #On passe à l'utilisateur suivant
            indice=indice+1 
     
            #On commence un nouveau dictionnaire avec les notes vu qu'on est passé à l'utilisateur suivant
            ratings[int(movie_id)] = float(note) 
     
     
    #On enregistre le dernier utilisateur
    user = User(int(user_id),ratings) 
    tous_les_users.append(user)
     
     
    #####Imprimer les informations concernant les utilisateurs#####
     
    for a in tous_les_users:
        a.imprimer_users()
    Ce qui est affiché:

    1
    {3: 4.0, 39: 4.0, 104: 4.0, 141: 4.0, 150: 4.0, 231: 3.5, 277: 4.5, 344: 3.5, 356: 4.0, 364: 4.0, 367: 4.0, 377: 4.0, 440: 4.0, 500: 4.5, 586: 4.0, 588: 3.5, 595: 4.0, 597: 5.0, 788: 3.5, 858: 2.5, 903: 3.5, 919: 4.0, 1022: 4.0, 1035: 5.0, 1193: 3.0, 1221: 2.5, 1247: 4.0, 1307: 4.0, 1380: 5.0, 1393: 3.5, 1485: 4.5, 1544: 3.5, 1682: 4.0, 1721: 4.0, 1777: 4.0, 1784: 4.5, 1923: 4.5, 1961: 4.0, 1968: 4.0, 1997: 3.5, 2023: 1.5, 2081: 5.0, 2273: 4.0, 2294: 4.0, 2355: 3.5, 2424: 4.0, 2502: 3.5, 2683: 4.0, 2694: 4.5, 2706: 4.0, 2762: 3.5, 2770: 3.5, 2918: 3.5, 2997: 3.5, 3114: 3.5, 3176: 3.5, 3408: 4.0, 3753: 3.5, 3897: 4.5, 3948: 3.5, 4014: 4.0, 4018: 4.0, 4022: 3.5, 4025: 4.5, 4306: 3.5, 4308: 3.5, 4447: 4.5, 4718: 3.5, 4963: 3.0, 4995: 4.5, 5266: 3.5, 5299: 4.5, 5349: 4.5, 5464: 4.0, 5669: 3.5, 5679: 4.5, 5816: 3.0, 5995: 4.0, 6218: 3.5, 6373: 4.0, 6377: 4.0, 6502: 4.0, 6711: 2.5, 6942: 4.0, 8376: 4.0, 8464: 4.0, 8622: 3.5, 8636: 4.5, 8644: 4.0, 30707: 4.5, 30749: 4.5, 30793: 3.5, 33166: 5.0, 33679: 4.0, 34162: 4.5, 35836: 4.0, 40819: 4.5, 41566: 4.0, 41569: 4.0, 48385: 4.5}
    2
    {3: 4.0, 39: 4.0, 104: 4.0, 141: 4.0, 150: 4.0, 231: 3.5, 277: 4.5, 344: 3.5, 356: 4.0, 364: 4.0, 367: 4.0, 377: 4.0, 440: 4.0, 500: 4.5, 586: 4.0, 588: 3.5, 595: 4.0, 597: 5.0, 788: 3.5, 858: 2.5, 903: 3.5, 919: 4.0, 1022: 4.0, 1035: 5.0, 1193: 3.0, 1221: 2.5, 1247: 4.0, 1307: 4.0, 1380: 5.0, 1393: 3.5, 1485: 4.5, 1544: 3.5, 1682: 4.0, 1721: 4.0, 1777: 4.0, 1784: 4.5, 1923: 4.5, 1961: 4.0, 1968: 4.0, 1997: 3.5, 2023: 1.5, 2081: 5.0, 2273: 4.0, 2294: 4.0, 2355: 3.5, 2424: 4.0, 2502: 3.5, 2683: 4.0, 2694: 4.5, 2706: 4.0, 2762: 3.5, 2770: 3.5, 2918: 3.5, 2997: 3.5, 3114: 3.5, 3176: 3.5, 3408: 4.0, 3753: 3.5, 3897: 4.5, 3948: 3.5, 4014: 4.0, 4018: 4.0, 4022: 3.5, 4025: 4.5, 4306: 3.5, 4308: 3.5, 4447: 4.5, 4718: 3.5, 4963: 3.0, 4995: 4.5, 5266: 3.5, 5299: 4.5, 5349: 4.5, 5464: 4.0, 5669: 3.5, 5679: 4.5, 5816: 3.0, 5995: 4.0, 6218: 3.5, 6373: 4.0, 6377: 4.0, 6502: 4.0, 6711: 2.5, 6942: 4.0, 8376: 4.0, 8464: 4.0, 8622: 3.5, 8636: 4.5, 8644: 4.0, 30707: 4.5, 30749: 4.5, 30793: 3.5, 33166: 5.0, 33679: 4.0, 34162: 4.5, 35836: 4.0, 40819: 4.5, 41566: 4.0, 41569: 4.0, 48385: 4.5}
    3
    {3: 4.0, 39: 4.0, 104: 4.0, 141: 4.0, 150: 4.0, 231: 3.5, 277: 4.5, 344: 3.5, 356: 4.0, 364: 4.0, 367: 4.0, 377: 4.0, 440: 4.0, 500: 4.5, 586: 4.0, 588: 3.5, 595: 4.0, 597: 5.0, 788: 3.5, 858: 2.5, 903: 3.5, 919: 4.0, 1022: 4.0, 1035: 5.0, 1193: 3.0, 1221: 2.5, 1247: 4.0, 1307: 4.0, 1380: 5.0, 1393: 3.5, 1485: 4.5, 1544: 3.5, 1682: 4.0, 1721: 4.0, 1777: 4.0, 1784: 4.5, 1923: 4.5, 1961: 4.0, 1968: 4.0, 1997: 3.5, 2023: 1.5, 2081: 5.0, 2273: 4.0, 2294: 4.0, 2355: 3.5, 2424: 4.0, 2502: 3.5, 2683: 4.0, 2694: 4.5, 2706: 4.0, 2762: 3.5, 2770: 3.5, 2918: 3.5, 2997: 3.5, 3114: 3.5, 3176: 3.5, 3408: 4.0, 3753: 3.5, 3897: 4.5, 3948: 3.5, 4014: 4.0, 4018: 4.0, 4022: 3.5, 4025: 4.5, 4306: 3.5, 4308: 3.5, 4447: 4.5, 4718: 3.5, 4963: 3.0, 4995: 4.5, 5266: 3.5, 5299: 4.5, 5349: 4.5, 5464: 4.0, 5669: 3.5, 5679: 4.5, 5816: 3.0, 5995: 4.0, 6218: 3.5, 6373: 4.0, 6377: 4.0, 6502: 4.0, 6711: 2.5, 6942: 4.0, 8376: 4.0, 8464: 4.0, 8622: 3.5, 8636: 4.5, 8644: 4.0, 30707: 4.5, 30749: 4.5, 30793: 3.5, 33166: 5.0, 33679: 4.0, 34162: 4.5, 35836: 4.0, 40819: 4.5, 41566: 4.0, 41569: 4.0, 48385: 4.5}
    4
    {3: 4.0, 39: 4.0, 104: 4.0, 141: 4.0, 150: 4.0, 231: 3.5, 277: 4.5, 344: 3.5, 356: 4.0, 364: 4.0, 367: 4.0, 377: 4.0, 440: 4.0, 500: 4.5, 586: 4.0, 588: 3.5, 595: 4.0, 597: 5.0, 788: 3.5, 858: 2.5, 903: 3.5, 919: 4.0, 1022: 4.0, 1035: 5.0, 1193: 3.0, 1221: 2.5, 1247: 4.0, 1307: 4.0, 1380: 5.0, 1393: 3.5, 1485: 4.5, 1544: 3.5, 1682: 4.0, 1721: 4.0, 1777: 4.0, 1784: 4.5, 1923: 4.5, 1961: 4.0, 1968: 4.0, 1997: 3.5, 2023: 1.5, 2081: 5.0, 2273: 4.0, 2294: 4.0, 2355: 3.5, 2424: 4.0, 2502: 3.5, 2683: 4.0, 2694: 4.5, 2706: 4.0, 2762: 3.5, 2770: 3.5, 2918: 3.5, 2997: 3.5, 3114: 3.5, 3176: 3.5, 3408: 4.0, 3753: 3.5, 3897: 4.5, 3948: 3.5, 4014: 4.0, 4018: 4.0, 4022: 3.5, 4025: 4.5, 4306: 3.5, 4308: 3.5, 4447: 4.5, 4718: 3.5, 4963: 3.0, 4995: 4.5, 5266: 3.5, 5299: 4.5, 5349: 4.5, 5464: 4.0, 5669: 3.5, 5679: 4.5, 5816: 3.0, 5995: 4.0, 6218: 3.5, 6373: 4.0, 6377: 4.0, 6502: 4.0, 6711: 2.5, 6942: 4.0, 8376: 4.0, 8464: 4.0, 8622: 3.5, 8636: 4.5, 8644: 4.0, 30707: 4.5, 30749: 4.5, 30793: 3.5, 33166: 5.0, 33679: 4.0, 34162: 4.5, 35836: 4.0, 40819: 4.5, 41566: 4.0, 41569: 4.0, 48385: 4.5}
    5
    {3: 4.0, 39: 4.0, 104: 4.0, 141: 4.0, 150: 4.0, 231: 3.5, 277: 4.5, 344: 3.5, 356: 4.0, 364: 4.0, 367: 4.0, 377: 4.0, 440: 4.0, 500: 4.5, 586: 4.0, 588: 3.5, 595: 4.0, 597: 5.0, 788: 3.5, 858: 2.5, 903: 3.5, 919: 4.0, 1022: 4.0, 1035: 5.0, 1193: 3.0, 1221: 2.5, 1247: 4.0, 1307: 4.0, 1380: 5.0, 1393: 3.5, 1485: 4.5, 1544: 3.5, 1682: 4.0, 1721: 4.0, 1777: 4.0, 1784: 4.5, 1923: 4.5, 1961: 4.0, 1968: 4.0, 1997: 3.5, 2023: 1.5, 2081: 5.0, 2273: 4.0, 2294: 4.0, 2355: 3.5, 2424: 4.0, 2502: 3.5, 2683: 4.0, 2694: 4.5, 2706: 4.0, 2762: 3.5, 2770: 3.5, 2918: 3.5, 2997: 3.5, 3114: 3.5, 3176: 3.5, 3408: 4.0, 3753: 3.5, 3897: 4.5, 3948: 3.5, 4014: 4.0, 4018: 4.0, 4022: 3.5, 4025: 4.5, 4306: 3.5, 4308: 3.5, 4447: 4.5, 4718: 3.5, 4963: 3.0, 4995: 4.5, 5266: 3.5, 5299: 4.5, 5349: 4.5, 5464: 4.0, 5669: 3.5, 5679: 4.5, 5816: 3.0, 5995: 4.0, 6218: 3.5, 6373: 4.0, 6377: 4.0, 6502: 4.0, 6711: 2.5, 6942: 4.0, 8376: 4.0, 8464: 4.0, 8622: 3.5, 8636: 4.5, 8644: 4.0, 30707: 4.5, 30749: 4.5, 30793: 3.5, 33166: 5.0, 33679: 4.0, 34162: 4.5, 35836: 4.0, 40819: 4.5, 41566: 4.0, 41569: 4.0, 48385: 4.5}

    Alors que chacun devrait avoir des notes différentes pour chaque film et que les utilisateurs n'ont pas vu les mêmes films.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Tous les utilisateurs partagent le même ratings.
    Il faut remplacer le ratings.clear() de la ligne 46 par ratings = {}.

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

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup ! C'était bien ça

Discussions similaires

  1. Problème avec utilisation de ComPortLib + Arduino
    Par fab56 dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/02/2014, 16h03
  2. [XL-2003] Problème avec utilisation d'une fonction dans les formules
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/05/2009, 10h43
  3. problème avec utilisation de cryptAPI
    Par ironboy007 dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 23/04/2009, 14h25
  4. probléme avec utilisation de deux tables
    Par lila23 dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/02/2009, 13h26
  5. [Compiler] Problème avec utilisation du MCR
    Par Death83 dans le forum MATLAB
    Réponses: 8
    Dernier message: 30/10/2007, 12h59

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