Alpha Vantage для l oop TypeError: строковые индексы должны быть целыми числами - PullRequest
1 голос
/ 04 апреля 2020

Я пытался получить данные для каждого l oop до go через данные и вывести ключи и значения для указанных c дней, например 2020-04-03. Но я продолжаю получать следующую ошибку: Ошибка типа: строковые индексы должны быть целыми числами

Мой код:

import time
from alpha_vantage.timeseries import TimeSeries
import json

key = 'Your key here'
ts = TimeSeries(key)
ko, meta = ts.get_daily(symbol='KO')

ko_info = json.dumps(ko, indent = 2, sort_keys = True)

data = json.loads(ko_info)

print(data)
print(type(data))

ko_org = json.dumps(data, indent = 2, sort_keys = True)
print(ko_org)
print(type(ko_org))

for x in ko_org['2020-04-01']:
    print(x['1. open'])

Данные:

{
  "2019-11-11": {
    "1. open": "52.3300",
    "2. high": "52.3700",
    "3. low": "51.7750",
    "4. close": "51.8400",
    "5. volume": "8198125"
  },
  "2019-11-12": {
    "1. open": "51.9100",
    "2. high": "51.9100",
    "3. low": "51.5831",
    "4. close": "51.7100",
    "5. volume": "12656881"
  },
  "2019-11-13": {
    "1. open": "52.1800",
    "2. high": "52.4500",.....

1 Ответ

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

Несколько вещей:

  1. Оболочка Alpha Vantage python возвращает данные в json, поэтому нет необходимости делать:
ko_info = json.dumps(ko, indent = 2, sort_keys = True)

data = json.loads(ko_info)

print(data)
print(type(data))

ko_org = json.dumps(data, indent = 2, sort_keys = True)
print(ko_org)
print(type(ko_org))

Как это избыточно, так что мы можем отказаться от всего этого.

Как сказал @Psidom, вы не можете l oop через строку json .dumps, как это, однако мы можем l oop через dict / json, которую мы получаем из обычных возвращаемых данных, как таковые :
for x in ko:
    if x == '2020-04-01':
        print(ko[x])

Здесь читается «для каждой даты x во всех возвращаемых данных, если дата x равна« 2020-04-01 », напечатайте цитату с этой даты»

Мы собрали все вместе, чтобы получить:

import time
from alpha_vantage.timeseries import TimeSeries

key = 'Your key here'
ts = TimeSeries(key)
ko, meta = ts.get_daily(symbol='KO')

for x in ko:
    if x == '2020-04-01':
        print(ko[x])
...