You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实时循环更新选中期权LTP及去除显示大括号的方法

问题:实时更新期权LTP时显示带大括号的集合,如何去除?

我有两个字典:

gData = {'43506': '88.70', '43507': '138.60', '43500': '112.60', '43499': '112.95', '41708': '141.50', '41709': '91.00'}
PE_dict = {'43507': 'NIFTY21DEC23P21500', '43500': 'NIFTY21DEC23P21450', '41709': 'NIFTY21DEC23P21400'}

其中gData以token为键、LTP(最新成交价)为值,PE_dict以token为键、期权合约代码为值。

我通过WebSocket在无限循环中实时更新gData,同时用Tkinter的OptionMenu绑定PE_dict的期权合约代码。原本切换选项时只能获取一次对应LTP,无法实时更新;修改live_feed函数后实现了实时更新,但pe_ltp以集合形式显示带有大括号{},请问如何去除这些大括号?

修改后的live_feed代码:

def live_feed():
    print("Inside live_feed function")
    # api.subscribe()
    global myLabel1
    global pe_ltp
    while not exitProgram:
        print()
        print(gData)
        print("Length of gData - ", len(gData))
        var = gData
        myLabel1.config(text=var)
        pe_token = list({k for k, v in PE_dict.items() if v == clicked_PE.get()})
        pe_ltp = {v for k, v in gData.items() if k == pe_token[0]}
        selected_PE_Strike.config(text=pe_ltp)
        time.sleep(0.15)

问题原因

你使用了集合推导式{v for k, v in gData.items() if k == pe_token[0]}生成pe_ltp,集合的默认字符串表示自带大括号,所以显示时会出现{}。

解决方法

因为每个token在gData中对应唯一的LTP,完全不需要用集合,直接通过键取值即可:

修改这两行代码:

pe_token = list({k for k, v in PE_dict.items() if v == clicked_PE.get()})
pe_ltp = {v for k, v in gData.items() if k == pe_token[0]}

替换为:

# 从PE_dict中匹配对应合约的token(合约代码唯一,用next直接取第一个匹配项)
pe_token = next(k for k, v in PE_dict.items() if v == clicked_PE.get())
# 直接通过token从gData中获取LTP,加默认值避免KeyError
pe_ltp = gData.get(pe_token, "N/A")

标签更新代码保持不变:

selected_PE_Strike.config(text=pe_ltp)

额外优化

  1. 原代码用集合推导式转列表获取pe_token完全没必要,因为每个合约代码在PE_dict中对应唯一token,用next()直接获取更高效简洁。
  2. 用gData.get()替代直接索引gData[pe_token],可以防止当token不在gData中时抛出KeyError,提升代码稳定性。

内容的提问来源于stack exchange,提问作者Scalper Vegeta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:27:35