访问 Python 中嵌套字典中的值 - 字符串索引必须是整数

Accessing Values In Nested Dict In Python - String Indices Must Be Integers

我已经解决了其他类似的问题,但仍然无法确定我的问题。

我有这个 JSON 数据 return 来自 API 电话:

{
  "Open": {
    "1638316800000": 120.5400009155,
    "1640995200000": 106.1399993896,
    "1643673600000": 67.2799987793,
    "1646092800000": 65.4300003052,
    "1648771200000": 50.1800003052,
    "1651104000000": 31.5699996948
  },
  "High": {
    "1638316800000": 126.75,
    "1640995200000": 106.8000030518,
    "1643673600000": 71.5,
    "1646092800000": 66.5400009155,
    "1648771200000": 50.2599983215,
    "1651104000000": 31.6900005341
  },
  "Low": {
    "1638316800000": 88.4000015259,
    "1640995200000": 50.0,
    "1643673600000": 53.5,
    "1646092800000": 33.4599990845,
    "1648771200000": 30.5799999237,
    "1651104000000": 30.5209999084
  },
  "Close": {
    "1638316800000": 103.6900024414,
    "1640995200000": 65.7399978638,
    "1643673600000": 67.5599975586,
    "1646092800000": 50.2400016785,
    "1648771200000": 31.2199993134,
    "1651104000000": 30.6100006104
  }
}

我要做的就是将“关闭”数据分配给新变量关闭和 return 关闭而不是整个字典响应。

这是我目前正在尝试的,我尝试了不同的变体,并且都保持 returning“字符串索引必须是整数”

@app.route("/history")
def display_history():

    symbol = request.args.get('symbol', default="AAPL")
    period = request.args.get('period', default="1y")
    interval = request.args.get('interval', default="1mo")
    quote = yf.Ticker(symbol)
    hist = quote.history(period=period, interval=interval)
    data = hist.to_json()
    close = data["Close"]
    return close

您正在尝试使用 data,这是一个 json 格式的字符串,正如您的解释器告诉您的那样。

为了将其作为带有键“Close”的字典来阅读,您可以使用 json 包中的函数 loads。它将字符串反序列化为 Python 字典:

data = hist.to_json()
data = json.loads(data)
close = data["Close"]

此外,Ticker.history() 似乎来自 yfinance 模块,returns 一个 pandas 数据框。如果是这种情况,您可以改用它:

data = hist.to_dict()
close = data['Close']

这样,数据不会转换为 Json 然后再次返回 Python 字典,而是直接转换为字典。