Проблема с TypeError: индексы списка должны быть целыми или кусочками, а не dict - PullRequest
0 голосов
/ 17 апреля 2020

Для приведенного ниже фрагмента кода я получаю сообщение об ошибке: TypeError: list indices must be integers or slices, not dict.

coin['orderBooks'][i] действительно является диктом, но как я могу тогда удалить / удалить его? Мне нужно удалить из моего набора данных для дальнейшего анализа.

#check if bid_price or ask_price exists, if not remove it from orderbooks
for coin in orderbooks:
    for i in coin['orderBooks']:
        bid_price = i['orderBook']['bids']
        ask_price = i['orderBook']['asks']
        if bid_price == [] or ask_price == []:
            del coin['orderBooks'][i]
Traceback (most recent call last):

  File "<ipython-input-47-07d8008d3d9c>", line 6, in <module>
    del coin['orderBooks'][i]

TypeError: list indices must be integers or slices, not dict

1 Ответ

1 голос
/ 17 апреля 2020

Вы неправильно поняли, coin['orderBooks'][i] - это не dict (даже выдает ошибку), i - ошибка, вы должны назвать ее по-другому, так как вы получаете доступ к i['orderBook'], вы видите, что это dict, и чтобы удалить его, вы можете использовать его индекс в массиве

Это будет выглядеть так:

for coin in orderbooks:
    for idx, val in enumerate(coin['orderBooks']):
        bid_price = val['orderBook']['bids']
        ask_price = val['orderBook']['asks']
        if not bid_price or not ask_price:
            del coin['orderBooks'][idx]

Но так как удаление во время итерации не очень хорошая идея, вы можете оставьте хорошие , с легким пониманием oop

for coin in orderbooks:
    coin['orderBooks'] = [val for val in coin['orderBooks'] 
                              if val['orderBook']['bids'] and val['orderBook']['askas']]

Также вы можете проверить пустой список напрямую с помощью значения bool (bool([]) == False)

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