如何对列表列表进行分组

Tam*_*mpa 1 python

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

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)
]
Run Code Online (Sandbox Code Playgroud)

问题是第二个col具有dup id但不同的计数.我需要有一个列表来汇总计数,所以列表看起来像这样.在python中有一组cluase吗?

list=[
     ('2013-01-04', u'crid9904536154', 1104937),
     ('2013-01-04', u'crid7990924609', 976410),
     ('2013-01-04', u'crid2557171372', 78874)
    ]
Run Code Online (Sandbox Code Playgroud)

eum*_*iro 6

让我们为你的列表命名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),))
Run Code Online (Sandbox Code Playgroud)

b 就是现在:

[('2013-01-04', u'crid2557171372', 78874),
 ('2013-01-04', u'crid7990924609', 976410),
 ('2013-01-04', u'crid9904536154', 1104937)]
Run Code Online (Sandbox Code Playgroud)