Itérer sur un dictionnaire, en ajoutant des clés et des valeurs
-
09-10-2019 - |
Question
Je voudrais itérer sur un dictionnaire, modifiant le dictionnaire chaque fois plutôt que ce qui se passe actuellement qui est remise à zéro l'ancienne valeur par la nouvelle.
Mon code actuel est:
while True:
grades = { raw_input('Please enter the module ID: '):raw_input('Please enter the grade for the module: ') }
mais hélas, cela ne modifie pas la liste, mais supprime plutôt les valeurs précédentes. Comment puis-je aller sur modifier le dictionnaire?
(Aussi, quand je lance cela, il me veut entrer la valeur avant que la clé, pourquoi cela se produit?)
La solution
Dans votre exemple, les notes (dictionnaire) est à chaque fois se rafraîchir avec une nouvelle clé, paire de valeurs.
>>> grades = { 'k':'x'}
>>> grades
{'k': 'x'}
>>> grades = { 'newinput':'newval'}
>>> grades
{'newinput': 'newval'}
>>>
Ce que vous devriez avoir fait est mise à jour la clé, paire de valeurs pour la même dict:
>>> grades = {}
>>> grades['k'] = 'x'
>>> grades['newinput'] = 'newval'
>>> grades
{'k': 'x', 'newinput': 'newval'}
>>>
Essayer cette :
>>> grades = {}
>>> while True:
... k = raw_input('Please enter the module ID: ')
... val = raw_input('Please enter the grade for the module: ')
... grades[k] = val
...
Please enter the module ID: x
Please enter the grade for the module: 222
Please enter the module ID: y
Please enter the grade for the module: 234
Please enter the module ID: z
Please enter the grade for the module: 456
Please enter the module ID:
Please enter the grade for the module:
Please enter the module ID: Traceback (most recent call last):
File "<stdin>", line 2, in <module>
KeyboardInterrupt
>>>
>>> grades
{'y': '234', 'x': '222', 'z': '456', '': ''}
>>>
Autres conseils
grades = {}
while True:
module = raw_input(...)
grade = raw_input(...)
if not grades[module]:
grades[module] = []
grades[module].append(grade)
Si vous utilisez Python 2.5 +:
import collections
grades = collections.defaultdict(list)
while True:
grades[raw_input('enter module')].append(raw_input('enter grade'))
Vous réassignez (lire: remplacement). grades
à chaque itération, de la boucle
Vous devez nouvelles clés mettre du dictionnaire en fait:
grades = {}
while True: // some end condition would be great
id = raw_input('Please enter the module ID: ')
grade = raw_input('Please enter the grade for the module: ')
// set the key id to the value of grade
grades[id] = grade