我有以下字典:
msg = {"response":{"data":{"aPr":"143.90","aSz":"75","avgPr":"190.12","bPr":"143.70","bSz":"75","c":"398.40","ch":"-254.50","chPer":"-63.88","h":"277.60","l":"123.20","lTrdT":"14 May 2020, 03:21:21 PM","ltp":"143.90","ltq":"75","ltt":"14 May 2020, 03:21:21 PM","lttUTC":"14 May 2020, 09:51:21 AM","o":"245.95","oI":"58275","oIChg":"-50100.00","sym":"59605_NFO","tBQ":"347625","tSQ":"44925","ttv":"425688175.07","vol":"2239050","yH":"277.60","yL":"0.00"},"streaming_type":"quote"}}
我想从中提取关键值。我正在使用以下代码:
ltp = msg(["ltp"])
但它表明:
error :string indices must be integers"
import requests
import pdb
import json
import pprint
import websocket
from websocket import WebSocketApp
import xlwings as xw
import datetime
name = "Tickdata"
wb = xw.Book('watchlist.xlsx')
sht3 = wb.sheets['Tickdata']
row_no = 2
def on_message(ws, msg):
global row_no
pdb.set_trace()
print (msg)
ltp = msg(["ltp"])
sht3.range('A' + str(row_no)).value = msg
row_no = row_no + 1
def on_error(ws, error):
print (error)
def on_close(ws):
print ("Connection Closed")
def on_open(ws):
print ("Sending json")
data='{"request":{"streaming_type":"quote", "data":{"symbols":[{"symbol":"59605_NFO"}, {"symbol":"59606_NFO"}]}, "request_type":"subscribe", "response_format":"json"}}'
ws.send(data)
ws.send("\n")
headers = {'x-session-token': ''}
websocket.enableTrace(True)
ws = websocket.WebSocketApp("wss://stream.stocknote.com", on_open = on_open, on_message = on_message, on_error = on_error, on_close = on_close, header = headers)
ws.run_forever()
这是Samco的API“https://developers.stocknote.com/api/?python#search-equity-scrips”
你不叫字典。正如注释中的user@fas所指出的,ltp不是直接在字典中,而是嵌套在数据字典中,数据字典嵌套在响应字典中。因此,您的代码将是:
如果希望它是十进制的,请使用
你必须逐级访问字典
具有:
这样做有三个级别:
会给你价值。如果您只需要键值,可以使用keys(),如下所示:
您可以尝试以下方法:
或者直接获取键值:
相关问题 更多 >
编程相关推荐