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

如何按规则筛选Python字典生成dict_C和dict_P两个新字典?

拆分期权字典为看涨/看跌字典

输入字典

dct={'48689': 'FINNIFTY02JAN24C20900', '46624': 'FINNIFTY09JAN24P20900', '40811': 
'NIFTY14DEC23C20750', '40812': 'NIFTY14DEC23P20750', '40813': 'NIFTY14DEC23C20800', '40814': 
'NIFTY14DEC23P20800', '40817': 'NIFTY14DEC23C20850', '40818': 'NIFTY14DEC23P20850', '40828': 
'NIFTY14DEC23C20900', '40832': 'NIFTY14DEC23P20900', '40834': 'NIFTY14DEC23C20950', '40839': 
'NIFTY14DEC23P20950'}

拆分规则

  • 若字典的value包含23C2、23C1、24C1或24C2,将对应键值对存入dict_C
  • 若字典的value包含23P2、23P1、24P2或24P1,将对应键值对存入dict_P

预期输出

dict_C - 
    {'48689': 'FINNIFTY02JAN24C20900', '40811': 
    'NIFTY14DEC23C20750','40813': 'NIFTY14DEC23C20800', '40817': 'NIFTY14DEC23C20850','40828': 
    'NIFTY14DEC23C20900','40834': 'NIFTY14DEC23C20950'}

dict_P - 
    { '46624': 'FINNIFTY09JAN24P20900', '40812': 'NIFTY14DEC23P20750', '40814': 
    'NIFTY14DEC23P20800', '40818': 'NIFTY14DEC23P20850', '40832': 'NIFTY14DEC23P20900', '40839': 
    'NIFTY14DEC23P20950'}

现有初级实现(仅生成列表)

strike_list = []
CE_list = []
PE_list = []
strike_list = list(dct.values())

arrC = ["23C1", "23C2", "24C2", "24C1"]
arrP = ["23P1", "23P2", "24P2", "24P1"]
for i in strike_list:
    for j in arrC:
        if j in i:
            CE_list.append(i)
print(CE_list)

for i in strike_list:
    for j in arrP:
        if j in i:
            PE_list.append(i)
print(PE_list)

改进方案(生成目标字典)

直接遍历原字典的键值对,判断后直接构建目标字典:

dct={'48689': 'FINNIFTY02JAN24C20900', '46624': 'FINNIFTY09JAN24P20900', '40811': 
'NIFTY14DEC23C20750', '40812': 'NIFTY14DEC23P20750', '40813': 'NIFTY14DEC23C20800', '40814': 
'NIFTY14DEC23P20800', '40817': 'NIFTY14DEC23C20850', '40818': 'NIFTY14DEC23P20850', '40828': 
'NIFTY14DEC23C20900', '40832': 'NIFTY14DEC23P20900', '40834': 'NIFTY14DEC23C20950', '40839': 
'NIFTY14DEC23P20950'}

# 定义匹配模式集合
c_patterns = {"23C1", "23C2", "24C1", "24C2"}
p_patterns = {"23P1", "23P2", "24P1", "24P2"}

dict_C = {}
dict_P = {}

# 遍历原字典的键值对
for key, value in dct.items():
    # 匹配看涨期权模式
    for pattern in c_patterns:
        if pattern in value:
            dict_C[key] = value
            break
    # 匹配看跌期权模式
    for pattern in p_patterns:
        if pattern in value:
            dict_P[key] = value
            break

# 打印结果
print("dict_C - ")
print("    ", dict_C)
print("\ndict_P - ")
print("    ", dict_P)

优化说明

  1. 直接遍历dct.items(),同时获取键和值,无需单独提取values列表
  2. 匹配到模式后立即break,避免不必要的重复检查
  3. 一步构建目标字典,省去从列表还原键值对的步骤
  4. 使用集合存储匹配模式,理论上查找效率略高于列表(数据量小时差异可忽略)

内容的提问来源于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.04 04:36:02