Скажем, у меня есть список 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 ключа в <code>dict1 И dict2
.Другими словами, как только самая ранняя запись для пары cat1, cat2
найдена, она должна быть проверена в каждом dict1
и dict2
, и, если найдено, что ID
содержится в списке значений для 4+ клавиш любого изсловарь, он должен перейти к следующей самой ранней записи для этой пары cat1, cat2
, и для добавления записи в L2
ее ID
должно быть в 3 или менее ключах как dict1
, так и dict2
.Я не совсем уверен, как это сделать ... может быть, использовать 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]
, поэтому вместо L2, имеющего только самую раннюю запись для пары cat1, cat2
, она будет содержать самую раннюю запись, где ID
из этой записи не входит в список ID
в 4+ клавишахв обоих dict1
И dict2
.