Bonjour
est que c'est possible de assigner plus une valeur pour une clé d'un dictionnaire sous python
Merci :D
Version imprimable
Bonjour
est que c'est possible de assigner plus une valeur pour une clé d'un dictionnaire sous python
Merci :D
Bonjour
Non directement, mais il existe des solutions. Par parenthèse, le question est
légèrement ambiguë. S'agit-il d'un dict dont les éléments sont des liste de valeurs ou un dict dont les clef sont "multi-champs" ?
A tout hasard, voici un exemple de chaque :
Rien n'impose, dans le premier cas, d'utiliser des listes. On peut ainsi avoir un dict de dict.Code:
1
2
3
4
5
6 # Dictionnaire à VALEURS multiple par clef dico_multivaleur = dict(a=[1,2],b=[],c=[5,6,7]) # Dictionnaire à clef MULTIVALEUR dico_clemultiple = {('a',1):7,('a',2):'I',('b',6):'H'}
Par contre, dans le second, pour que ça marche, il faut impérativement que la clef soit hashable. Un tuple, par exemple.
Merci chticricri pour votre repense , pour les gent qui on la même question voir ICI
mais maintenant j'ai un autre problème ,je eut remplir un fichier dans un dictionnaire mais les données dans mon fichier sont stocker comme suite ''par exemple'' :
doc1 consulter 1 0.0795202091199
doc1 régies 2 0.15904041824
doc1 licence, 1 0.0795202091199
doc1 licence. 1 0.0795202091199
doc1 contrat 4 0.31808083648
doc1 logicielles 1 0.0795202091199
doc1 averti 1 0.0795202091199
doc1 message 1 0.0795202091199
doc1 recevrez 1 0.0795202091199
doc1 recevez 1 0.0795202091199
doc1 examiner 1 0.0795202091199
doc1 recevoir 1 0.0795202091199
doc2 démarrer, 1 0.15904041824
doc2 figure 1 0.15904041824
doc2 update. 1 0.15904041824
doc2 cette 1 0.15904041824
doc2 update) 1 0.15904041824
doc2 n'ouvre 1 0.15904041824
doc2 l'avenir, 1 0.15904041824
doc2 configuration. 1 0.0
doc2 jour 2 0.0
doc2 puis 1 0.15904041824
doc2 menu 1 0.15904041824
doc2 automatiquement 1 0.0
doc2 page 1 0.15904041824
doc3 booléen 1 0.11928031368
doc3 while. 1 0.11928031368
doc3 l'utilisez 1 0.11928031368
doc3 break, 1 0.11928031368
doc3 parfois, 1 0.11928031368
doc3 appréhender 1 0.11928031368
doc3 termes 1 0.0
doc3 précisant 1 0.11928031368
doc3 cas-là 1 0.11928031368
doc3 s'en 1 0.11928031368
doc3 exemple, 1 0.11928031368
doc3 lettre 1 0.11928031368
doc3 break 2 0.23856062736
doc3 voir 1 0.11928031368
doc3 claire 1 0.11928031368
pour remplir mon dictionnair j'ai fait ça
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 def remplir(numDoc): fileindex=open("doc_poid_gloabal.txt" ,"r").read().split("\n") indexDec={} listindex=[ word.split(" ") for word in fileindex] result=[] nbr=0 print 'la longuer de listindex ',len(listindex) for word in listindex: if (len(word[0].split())>1):// pour eviter les blanc indexDec[word[0].split()[0]]=(word[0].split()[1],word[0].split()[2],word[0].split()[3]) print 'indexDec ',indexDec
voici le résultat
Code:
1
2
3 indexDec {'doc2': ('page', '1', '0.15904041824'), 'doc3': ('claire', '1', '0.11928031368'), 'doc1': ('feter', '1', '0.0954242509439')}
mais moi je veut garder tout les information du doc2 par exemple dans le dictionnaire mais comme " doc2 " est une clé il garde la dernier information
comment je peut faire ça
indexDec {'doc2': ('page', '1', '0.15904041824'),('démarrer', 1,'0.15904041824'),doc2:(****,****,***,),(***,***,***)....}
est que c'est possible de faire ça
Merci
Dans un dict (on dit aussi tableau associatif), les clefs sont, au plus, présentes
une fois. Il est donc logique que, dans ton code, tu écrase systématiquement la valeur précédente par la nouvelle.
Pour éviter cela, le mieux est de voir, comme dans mon exemple, chaque item de ton dict comme une liste.
A la lecture d'une clef, tu dois tester si celle-ci existe.
- Si non, créer une nouvelle liste pour cette clef dico[clef]=[valeur]
- Si oui, faire un append : dico[clef].append(valeur)
Ce n'est pas plus compliqué que cela
Pour info, c’est faisable en une seule ligne*:
…renvoie les données indexées par my_key si cette clé est déjà présente dans le dico, sinon il crée l’entrée correspondante, lui assigne le second paramètre (ici, une liste vide), et le renvoie. Très pratique*! ;)Code:my_dict.setdefault(my_key, []).add(elem)
je vous remeirci pour votre repense j'ai essayé t'on code
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 def remplir(numDoc): fileindex=open("doc_poid_gloabal.txt" ,"r").read().split("\n") indexDec={} listindex=[ word.split(" ") for word in fileindex] result=[] nbr=0 for word in listindex: if (len(word[0].split())>1): print 'len(word[0].split()[0]',word[0].split()[0],len(word[0].split()) nbr=nbr+1 print 'nbr ',nbr indexDec.setdefault(word[0].split()[0], []).add((word[0].split()[1],word[0].split()[2],word[0].split()[3])) print 'indexDec ',indexDec
mais il affiche cette erreur :cry::cry:
Citation:
AttributeError: 'list' object has no attribute 'add'
Gah, désolé, c’est 'append' pour les listes…:aie:
Sinon, autant éviter de spliter plusieurs fois le mot*:
Code:
1
2 split_word = word[0].split() indexDec.setdefault(split_word[0], []).append(split_word[1:4])