Iterieren auf einem Wörterbuch, das Hinzufügen von Schlüsseln und Werten
-
09-10-2019 - |
Frage
Ich würde auf einem Wörterbuch zu Iterierte mag, das Wörterbuch jedes Mal zur Änderung eher als das, was zur Zeit geschieht, die den alten Wert mit dem neuen wird zurückgesetzt wird.
Mein aktueller Code ist:
while True:
grades = { raw_input('Please enter the module ID: '):raw_input('Please enter the grade for the module: ') }
aber leider geht diese Liste nicht ändern, sondern entfernt vielmehr die vorherigen Werte. Wie würde ich mich über das Wörterbuch zur Änderung?
(Auch wenn ich diese laufen, es will, dass ich den Wert vor dem Schlüssel zum Eingang, warum dies geschehen?)
Lösung
In Ihrem Beispiel-Typen (Wörterbuch) wird jedes Mal mit einem neuen Schlüssel, Wert-Paar aufgefrischt zu werden.
>>> grades = { 'k':'x'}
>>> grades
{'k': 'x'}
>>> grades = { 'newinput':'newval'}
>>> grades
{'newinput': 'newval'}
>>>
Was Sie haben sollte tun, ist Aktualisierung der Schlüssel, Wert-Paar für die gleiche dict:
>>> grades = {}
>>> grades['k'] = 'x'
>>> grades['newinput'] = 'newval'
>>> grades
{'k': 'x', 'newinput': 'newval'}
>>>
Versuchen Sie, diese :
>>> 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', '': ''}
>>>
Andere Tipps
grades = {}
while True:
module = raw_input(...)
grade = raw_input(...)
if not grades[module]:
grades[module] = []
grades[module].append(grade)
Wenn Sie mit Python 2.5 +:
import collections
grades = collections.defaultdict(list)
while True:
grades[raw_input('enter module')].append(raw_input('enter grade'))
Sie sind Neuzuweisung (sprich: zu ersetzen). grades
auf jeder Iteration der Schleife
Sie müssen neue Schlüssel des Wörterbuchs tatsächlich eingestellt:
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