假設我有一個列表L1
,並且L1
中的條目有4個部分,格式如下:cat1, cat2, date, ID
。該列表按cat1
條目按字母順序排列,然後按cat2
條目按字母順序排列,然後按最早的date
排序。我想要這個列表的子集,其中包含每個cat1, cat2
對的最早日期條目。這是代碼,我有一個已經做了這個:選擇列表中最早的條目也滿足其他條件
L1=[A, X, 2008-06-01, 1858
A, X, 2008-12-05, 1905
B, X, 2001-08-08, 1149
B, Y, 2006-03-05, 1638
B, Y, 2009-06-09, 1950
C, X, 2005-12-01, 1611
C, X, 2006-08-08, 1689
C, X, 2006-11-22, 1712
C, X, 2008-04-22, 1842
C, Y, 2008-12-05, 1816
C, Y, 2008-12-05, 1821
C, Y, 2008-12-05, 1882
C, Z, 2008-12-05, 1905
C, Z, 2009-06-01, 1935
C, Z, 2009-06-09, 1950
D, X, 2009-11-06, 1989
D, Y, 2008-12-05, 1905
D, Z, 2008-12-05, 1905
D, Z, 2008-12-05, 1905
E, X, 2008-12-05, 1905
E, Z, 2008-12-05, 1905
F, Y, 2008-12-05, 1905
G, X, 2008-12-05, 1905
G, Z, 2007-12-01, 1807]
L2=[j.next() for i, j in itertools.groupby(L1, lambda x: x.split(",", 2)[:2])]
L2=[A, X, 2008-06-01, 1858
B, X, 2001-08-08, 1149
B, Y, 2006-03-05, 1638
C, X, 2005-12-01, 1611
C, Y, 2008-12-05, 1816
C, Z, 2008-12-05, 1905
D, X, 2009-11-06, 1989
D, Y, 2008-12-05, 1905
D, Z, 2008-12-05, 1905
E, X, 2008-12-05, 1905
E, Z, 2008-12-05, 1905
F, Y, 2008-12-05, 1905
G, X, 2008-12-05, 1905
G, Z, 2007-12-01, 1807]
的訣竅,現在是,我想每個cat1, cat2
對,其中ID
是值的< = 3個鍵列表中dict1
最早進入和dict2
。換句話說,一旦找到cat1, cat2
對的最早條目,應該在每個dict1
和dict2
中測試,並且如果發現ID
包含在每個詞典的4+個鍵的值列表中,則應該轉到下一個對於cat1, cat2
對最早的條目,並且爲了將條目添加到L2
其ID
應該在dict1
和dict2
中都在3個或更少的關鍵字中。我不太清楚如何去做這個...也許使用re.search或其他東西?
dict1[key]=[ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID]
dict2[key]=[ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID]
因此,而不是隻具有每cat1, cat2
對最早進入L2,它將包含最早的條目,其中來自該條目的ID
是不是在這兩個dict1
和dict2
的ID
列表4+鍵中。
你的問題並不完全清楚。你可以發佈一些示例數據嗎? – chmullig 2011-02-11 16:53:05
這是[marsx提出的早期問題]的後續行動(http://stackoverflow.com/questions/4794850/selecting-the-earliest-entry-in-a-list)。 – 2011-02-11 17:04:31