假设我有一个列表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