Skip to main content
 首页 » 编程设计

python之如何对列表列表进行分组

2025年05月04日15arxive

我有一个如下所示的列表:

list=[ 
 ('2013-01-04', u'crid2557171372', 1), 
 ('2013-01-04', u'crid9904536154', 719677), 
 ('2013-01-04', u'crid7990924609', 577352), 
 ('2013-01-04', u'crid7990924609', 399058), 
 ('2013-01-04', u'crid9904536154', 385260), 
 ('2013-01-04', u'crid2557171372', 78873) 
] 

问题是第二个具有重复 ID 但计数不同的列。我需要一个列表来汇总计数,因此列表看起来像这样。 python中有group by cluase吗?

list=[ 
     ('2013-01-04', u'crid9904536154', 1104937), 
     ('2013-01-04', u'crid7990924609', 976410), 
     ('2013-01-04', u'crid2557171372', 78874) 
    ] 

请您参考如下方法:

让我们将您的列表命名为 a 而不是 list(list 是 Python 中非常有用的函数,我们不想屏蔽它):

import itertools as it 
 
a = [('2013-01-04', u'crid2557171372', 1), 
     ('2013-01-04', u'crid9904536154', 719677), 
     ('2013-01-04', u'crid7990924609', 577352), 
     ('2013-01-04', u'crid7990924609', 399058), 
     ('2013-01-04', u'crid9904536154', 385260), 
     ('2013-01-04', u'crid2557171372', 78873)] 
 
b = [] 
for k,v in it.groupby(sorted(a, key=lambda x: x[:2]), key=lambda x: x[:2]): 
    b.append(k + (sum(x[2] for x in v),)) 

b 现在是:

[('2013-01-04', u'crid2557171372', 78874), 
 ('2013-01-04', u'crid7990924609', 976410), 
 ('2013-01-04', u'crid9904536154', 1104937)]