我有一个如下所示的列表:
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)]
关于python - 如何对列表列表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14211597/