这是我的示例输入字典
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'}
Run Code Online (Sandbox Code Playgroud)
我想根据以下条件制作两个新词典dict_P和dict_C :
如果相应的 dct 值中有“23C2”或“23C1”或“24C1”或“24C2”,则相应的键、值将分配给 dict_C
如果相应的 dct 值中有“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'}
Run Code Online (Sandbox Code Playgroud)
我确实提出了非常简单的基于新手列表的解决方案,如下所示:
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)
Run Code Online (Sandbox Code Playgroud)
它有效,但我想要2 个字典(而不是列表),其中具有key:value
如上所述的相应对。
不要转换dct
为列表,而是使用 迭代键和值dct.items()
。然后,您可以将键和值添加到结果字典之一。
使用any()
而不是循环来判断它是否与过滤器列表之一匹配。
dict_C = {}
dict_P = {}
arrC = ["23C1", "23C2", "24C2", "24C1"]
arrP = ["23P1", "23P2", "24P2", "24P1"]
for key, value in dct.items():
if any(x in value for x in arrC):
dict_C[key] = value
elif any(x in value for x in arrP):
dict_P[key] = value
Run Code Online (Sandbox Code Playgroud)