Iterazione su un dizionario, l'aggiunta di chiavi e valori
-
09-10-2019 - |
Domanda
Vorrei iterare su un dizionario, che modifica il dizionario di volta in volta, piuttosto che ciò che sta accadendo, che è il ripristino del vecchio valore con quello nuovo.
Il mio codice attuale è:
while True:
grades = { raw_input('Please enter the module ID: '):raw_input('Please enter the grade for the module: ') }
Ma, ahimè, questo non modifica la lista, ma rimuove i valori precedenti. Come potrei fare per modifica il dizionario?
(Inoltre, quando si esegue questo, mi vuole per immettere il valore prima la chiave, perché avviene questo?)
Soluzione
Nel tuo esempio, gradi (dizionario) è sempre aggiornato ogni volta con una nuova chiave, coppia di valori.
>>> grades = { 'k':'x'}
>>> grades
{'k': 'x'}
>>> grades = { 'newinput':'newval'}
>>> grades
{'newinput': 'newval'}
>>>
Che cosa si dovrebbe state facendo è aggiornare la chiave, coppia di valori per la stessa dict:
>>> grades = {}
>>> grades['k'] = 'x'
>>> grades['newinput'] = 'newval'
>>> grades
{'k': 'x', 'newinput': 'newval'}
>>>
Prova questo :
>>> 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', '': ''}
>>>
Altri suggerimenti
grades = {}
while True:
module = raw_input(...)
grade = raw_input(...)
if not grades[module]:
grades[module] = []
grades[module].append(grade)
Se stai usando Python 2.5 +:
import collections
grades = collections.defaultdict(list)
while True:
grades[raw_input('enter module')].append(raw_input('enter grade'))
Si sta riassegnando (leggi: sostituzione). grades
su ogni iterazione, del ciclo
È necessario impostare in realtà nuove chiavi del dizionario:
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