#python #python-3.x #dictionary #for-loop #debugging
#python #python-3.x #словарь #для цикла #отладка
Вопрос:
Я новичок в python, я хочу распечатать словарь приведенного ниже кода в виде English:95 или English, 95 я использовал цикл for, но это не работает.
grade8_midterm = {'English': 95, 'Maths': 99, 'German': 86, 'History':96, 'Science': 91}
grade8_final = {'English': 92, 'Maths': 100, 'German': 89, 'History':92, 'Science': 99}
for x, y in grade8_midterm.keys(), grade8_midterm.values():
print (x, y)
Это результат, который я получаю:
for x, y in grade8_midterm.keys(), grade8_midterm.values():
ValueError: too many values to unpack (expected 2)
Комментарии:
1.
for x, y in zip(grade8_midterm.keys(), grade8_midterm.values()):
2.
for x, y in grade8_midterm.items():
Ответ №1:
Попробуйте
for x, y in grade8_midterm.items():
print (x, y)
dict.items()
вернет список кортежей пар ключ-значение в словаре
Пример,
d = {'a':1, 'b':2, 'c':3}
(print(d.items())
Вывод
dict_items([('a', 1), ('b', 2), ('c', 3)])
Комментарии:
1. nitpick:
dict.items()
возвращает коллекцию, подобную набору . Это не последовательность , не говоря уже о том, чтобы быть фактическим списком , например, он не индексируется и не нарезается.2. Верно. Я пытался объяснить в терминах непрофессионала, так как OP сказал, что они новички.
Ответ №2:
Вы получили информацию о том, что вам следует делать, но вот в чем ошибка:
grade8_midterm.keys(), grade8_midterm.values()
является литералом кортежа, «оператором кортежа» в Python является запятая, а скобки необязательны (если они однозначны). Итак, что вы пишете здесь, это
for x, y in (a, b):
...
что эквивалентно
for x, y in [a, b]:
...
с которым вы могли бы быть более знакомы.
Это означает, что вы действительно выполняете
x, y = grade8_midterm.keys()
...
x, y = grade8_midterm.values()
...
это означает, что Python ожидает, что значение (правая часть назначения) будет содержать 2 элемента, чтобы назначить их 2 целям (левая часть назначения).
Поскольку ваш dict содержит 5 записей, он имеет 5 ключей, поэтому первое присвоение является несоответствием и вызывает ошибку, которую вы видите: Python ожидал получить 2 значения для распаковки (соответствующие LHS) и получил другое их количество.