我希望在以下字典列表中为每个唯一的到期日期创建一个list / np.array:
import datetime as dt
data=[{'expiry': dt.datetime(2020, 6, 26, 21, 0), 'strike': 137.0},
{'expiry': dt.datetime(2020, 6, 26, 21, 0), 'strike': 137.25},
{'expiry': dt.datetime(2020, 6, 26, 21, 0), 'strike': 137.5},
{'expiry': dt.datetime(2020, 7, 24, 21, 0), 'strike': 136.5},
{'expiry': dt.datetime(2020, 7, 24, 21, 0), 'strike': 137.0},
{'expiry': dt.datetime(2020, 7, 24, 21, 0), 'strike': 137.5},
{'expiry': dt.datetime(2020, 7, 24, 21, 0), 'strike': 138.0}]
我可以这样获得唯一的失效日期:
exp = np.unique([np.array([d['expiry']]) for d in data])
所需的输出是:
[[137.0, 137.25, 137.5], [136.5, 137.0, 137.5, 138.0]]
答案 0 :(得分:2)
使用您的exp
:
[[y['strike'] for y in data if y['expiry']==x] for x in exp ]
输出:
[[137.0, 137.25, 137.5], [136.5, 137.0, 137.5, 138.0]]
答案 1 :(得分:1)
作为@AllaTarighati解决方案的替代方案,您还可以使用return_inverse
的{{1}}选项:
np.unique
这是一个无需任何其他比较(exp,ind = np.unique([np.array([d['expiry']]) for d in data], return_inverse=True)
strike = [[data[i]['strike'] for i,j in enumerate(ind) if j==k] for k in range(exp.size)]
)的解决方案:
j==k
两个示例代码的exp,ind = np.unique([np.array([d['expiry']]) for d in data], return_inverse=True)
strike = [[] for _ in range(exp.size)]
for i,j in enumerate(ind):
strike[j].append(data[i]['strike'])
输出为:
print(strike)