访问 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 字典,而是直接转换为字典。
我已经解决了其他类似的问题,但仍然无法确定我的问题。
我有这个 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 字典,而是直接转换为字典。