Перебор словаря, добавление ключей и значений - PullRequest
3 голосов
/ 10 января 2011

Я хотел бы выполнить итерацию по словарю, внося поправки в словарь каждый раз, а не в то, что происходит в данный момент, что сбрасывает старое значение с новым.

Мой текущий код:

while True:
    grades = { raw_input('Please enter the module ID: '):raw_input('Please enter the grade for the module: ') }

но, увы, это не меняет список, а скорее удаляет предыдущие значения.Как мне изменить словарь?

(Кроме того, когда я запускаю его, он хочет, чтобы я ввел значение ДО ключа, почему это происходит?)

Ответы [ 3 ]

17 голосов
/ 10 января 2011

В вашем примере оценки (словарь) обновляются каждый раз с новым парой ключ-значение.

>>> grades = { 'k':'x'}
>>> grades
{'k': 'x'}
>>> grades = { 'newinput':'newval'}
>>> grades
{'newinput': 'newval'}
>>> 

То, что вы должны были сделать, это обновить пару ключ-значение для того же слова:

>>> grades = {}
>>> grades['k'] = 'x'
>>> grades['newinput'] = 'newval'
>>> grades
{'k': 'x', 'newinput': 'newval'}
>>> 

Попробуйте это :

>>> 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', '': ''}
>>> 
2 голосов
/ 10 января 2011
grades = {}
while True:
  module = raw_input(...)
  grade = raw_input(...)

  if not grades[module]:
    grades[module] = []

  grades[module].append(grade)

Если вы используете Python 2.5 +:

import collections

grades = collections.defaultdict(list)
while True:
  grades[raw_input('enter module')].append(raw_input('enter grade'))
0 голосов
/ 10 января 2011

Вы переназначаете (читай: заменяете) grades на каждой итерации цикла.

Вы должны фактически установить новые ключи словаря:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...