2010-04-01 23 views
1

我有文件的數組子數組。我希望能夠將該數組分成多個子數組,每個子數組包含在同一天創建的文件。所以現在如果數組包含3月1日至3月31日的文件,我想要一個包含31個子數組的數組(假設每天至少有1個文件)。的Python:以數組並打入根據某些條件

從長遠來看,我試圖找到從每一天的文件與最新的創建/修改時間。如果有一種方法可以將它們整合到上面所要求的迭代中以節省一些CPU週期,那將更加理想。然後,我將有一個包含31個文件的平面陣列,每天一個,用於在每個單獨日期創建的最新文件。

我目前的數據結構是文件名的只是一個平面列表。

+0

您可能希望顯示一些代碼,所以我們知道確切的數據結構。 – 2010-04-01 22:16:10

+0

「數組」? 「子陣列」?你是說名單?如果是這樣,請編輯你的問題來說'list'。 – 2010-04-02 10:41:31

回答

2

上MESSA的回答跟進,如果你的結構是這樣的:

files=[{'date': datetime(2010, 3, 1, 0, 0, 10), 'file': 'foo'}, 
     {'date': datetime(2010, 3, 1, 12, 0, 10), 'file': 'bar'}, 
     {'date': datetime(2010, 3, 2, 3, 5, 10), 'file': 'baz'}, 
     {'date': datetime(2010, 3, 2, 3, 3, 10), 'file': 'foo'}] 

嘗試類似:

from itertools import groupby 
map(lambda x: next(x[1]), 
    groupby(sorted(files, 
        key=lambda x: x['date'], 
        reverse=True), 
     key=lambda x: datetime(x['date'].year, x['date'].month, x['date'].day))) 

,這將給你:

[{'date': datetime.datetime(2010, 3, 2, 3, 5, 10), 'file': 'baz'}, {'date': datetime.datetime(2010, 3, 1, 12, 0, 10), 'file': 'bar'}] 

基本上,它首先按日期排序(sorted),然後按日期分組(groupby),然後按ta kes每個組的第一個元素(next[1])。

3

,以充分利用每一天的最新時間戳的文件,使用字典與天爲鍵和(文件名,時間戳)作爲值的元組。循環遍歷所有文件,並且如果字典時間戳小於當前文件,或者當天還沒有值,則更新當天的字典值。

相關問題