如何按规则筛选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)
优化说明
- 直接遍历
dct.items(),同时获取键和值,无需单独提取values列表 - 匹配到模式后立即
break,避免不必要的重复检查 - 一步构建目标字典,省去从列表还原键值对的步骤
- 使用集合存储匹配模式,理论上查找效率略高于列表(数据量小时差异可忽略)
内容的提问来源于stack exchange,提问作者Scalper Vegeta
相关产品推荐
相关产品推荐

