Почему я получаю эту ошибку: TypeError: индексы кортежа должны быть целыми или кусочками, а не str - PullRequest
0 голосов
/ 10 мая 2019

У меня есть такой запрос:

{'d': {'BidVolume1': 0, 'BidPrice1': 0.0, 'BidVolume2': 0, 'BidPrice2': 0.0, 'BidVolume3': 0, 'BidPrice3': 0.0, 'BidVolume4': 0, 'BidPrice4': 0.0, 'BidVolume5': 0, 'BidPrice5': 0.0, 'AskTotalVolume': 0}}

Когда я пробую этот код

for key in r['d'].items() :
    print(key['BidTotalVolume'])

, я получаю следующее сообщение об ошибке:

TypeError: индексы кортежа должны быть целыми числами или слайсами, а не str

Я пытаюсь сказать программе: дайте мне значение элемента с помощью клавиши BidTotalVolume.

Как мне это сделать?Почему я получаю это сообщение об ошибке?

Ответы [ 3 ]

1 голос
/ 10 мая 2019

r[d] - это {'BidVolume1': 0, 'BidPrice1': 0.0, 'BidVolume2': 0, 'BidPrice2': 0.0, 'BidVolume3': 0, 'BidPrice3': 0.0, 'BidVolume4': 0, 'BidPrice4': 0.0, 'BidVolume5': 0, 'BidPrice5': 0.0, 'AskTotalVolume': 0}, так что это словарь.

Теперь вы выполняете итерацию по словарю, как этот:

for key in r['d'].items()

имя key вводит в заблуждение.Здесь key - это tuple ключей и значений.При попытке использовать [] в этом корте вы получаете эту ошибку.Вы должны получить доступ к своим данным напрямую так:

print(r['d']['BidTotalVolume'])
1 голос
/ 10 мая 2019

Во-первых, в вашем словаре, похоже, нет ключа bidtotalvolume.

Во-вторых, то, что вы пытаетесь сделать здесь, более или менее:

print(r['d'][key]['BidTotalVolume']) 

В вашем словаре нет 3 уровней, так что это никогда не сработает.

Я предполагаю, что вы хотите сделать:

for key, value in r.items():
    print(r[key]['BidTotalVolume'])

Что не получится, потому что BidTotalVolume нет в вашем словаре. Но попробуйте с любым ключом, который там есть, и он должен работать.

0 голосов
/ 10 мая 2019

Как предлагается в комментарии, используйте for key, values in d.items():, так как items () возвращает кортеж (ключ, значение).Для ключей можно использовать только ключи (), а для значений - значения ()

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