Ошибка: чтение словаря из файла json: слишком много значений для распаковки - PullRequest
0 голосов
/ 26 апреля 2018

См. Сообщение об ошибке и словарь ниже:

Traceback (most recent call last):
  File "C:/Users/richarddoi/Desktop/blackjack/test blackjack csv.py", line 9, in <module>
    for key,value in data:
ValueError: too many values to unpack (expected 2)

{'Ace of Hearts': 1, 'King of Hearts': 10, 'Queen of Hearts': 10, 'Jack of Hearts': 10, '10 of Hearts': 10, '9 of Hearts': 9, '8 of Hearts': 8, '7 of Hearts': 7, '6 of Hearts': 6, '5 of Hearts': 5, '4 of Hearts': 4, '3 of Hearts': 3, '2 of Hearts': 2, 'Ace of Spades': 1, 'King of Spades': 10, 'Queen of Spades': 10, 'Jack of Spades': 10, '10 of Spades': 10, '9 of Spades': 9, '8 of Spades': 8, '7 of Spades': 7, '6 of Spades': 6, '5 of Spades': 5, '4 of Spades': 4, '3 of Spades': 3, '2 of Spades': 2, 'Ace of Clubs': 1, 'King of Clubs': 10, 'Queen of Clubs': 10, 'Jack of Clubs': 10, '10 of Clubs': 10, '9 of Clubs': 9, '8 of Clubs': 8, '7 of Clubs': 7, '6 of Clubs': 6, '5 of Clubs': 5, '4 of Clubs': 4, '3 of Clubs': 3, '2 of Clubs': 2, 'Ace of Diamonds': 1, 'King of Diamonds': 10, 'Queen of Diamonds': 10, 'Jack of Diamonds': 10, '10 of Diamonds': 10, '9 of Diamonds': 9, '8 of Diamonds': 8, '7 of Diamonds': 7, '6 of Diamonds': 6, '5 of Diamonds': 5, '4 of Diamonds': 4, '3 of Diamonds': 3, '2 of Diamonds': 2}

Это появляется, когда я использую следующий код:

import json

with open('deckfile.json') as f:
    data = [json.loads(line) for line in f]
    for row in data:
        print(row)

Но в этот момент, когда я пытаюсь напечатать ключ изначение, используя этот код:

    for key,value in data:
        print(key, value)

Я получаю сообщение об ошибке.На сегодняшний день я успешно использовал txt и бинарные файлы.Я никогда не использовал словарь раньше при чтении из файла.

Мой вопрос: что означает слишком много значений?Насколько я знаю, есть словарь с: названием карты и стоимостью карты для каждой карты в колоде из 52 карт.Я использовал соглашение, чтобы попытаться получить ключ и значение без успеха.

1 Ответ

0 голосов
/ 26 апреля 2018

В for key,value in data есть две проблемы:

  1. data - список словарей.Вы, вероятно, имели в виду for key,value in row.
  2. Итерация по словарю итерирует только по его ключам.Чтобы перебрать ключи и значения, выполните for key,value in row.items().

Мой вопрос: что означает слишком много значений?

for key,value in data означаетчто data должен быть итерацией пар, которые распаковываются в key и value.Но первое, что вы получите при переборе data, это большой словарь, который он содержит.Чтобы попытаться распаковать словарь в key, value, Python выполняет итерацию по словарю и получает все 52 ключа, что является слишком большим количеством значений.

Подумайте об этом так: вы не сделаете:

for row in data:
    key, value = row

потому что в строке много ключей и значений.Вы также не сделаете:

for k in row:
    key, value = k

, потому что k является ключом row, который является строкой.Следовательно нам нужно .items().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...