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.