2017-03-01 54 views
2

我有一個對象列表。 列表中的一個屬性是以字符串形式存儲的m_expiry。 我想找到最短的日期差異(現在和那個屬性值之間),並得到列表的索引或對象本身。枚舉對象列表並返回索引或對象

目前expiryValue正在返回的時間差,而不是索引/對象(我想它返回IDX = 0或對象[0]

expiryValue = min((datetime.strptime(item.m_expiry,'%Y%m%d') -datetime.now()) for item in object) 

15天,10:12:00.077586

idx id  x y z a  m_expiry 

    [0] 215465490 ES ESH7 FUT GLOBEX 20170317 
    [1] 225652200 ES ESM7 FUT GLOBEX 20170616 
    [2] 236950077 ES ESU7 FUT GLOBEX 20170915 
    [3] 247950613 ES ESZ7 FUT GLOBEX 20171215 
    [4] 258973438 ES ESH8 FUT GLOBEX 20180316 
+0

你能改善你的問題嗎?詳細說明它;-) –

回答

1

你接近。這裏的訣竅是儘量減少項目,鍵控了他們timedelta,而不是最小化timedeltas自己。

對項目採取最小化,並使用minkey關鍵字參數。

min(items, key=...) 

您要定義的關鍵函數應接受一個項目並返回該項目的timedelta。您還應該注意製作timedelta的絕對值,而您在示例代碼中沒有這樣做。

這將返回項目本身,它已經在其上的索引,你可以在item.idx訪問。

+0

真棒謝謝!包括:從運營商導入attregetter – Karun