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

标签 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)
]

问题是第二个具有重复 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/

相关文章:

python - 从lxml中的html解析日期字符串

python - 如何在数天、数小时、数周和数月之后迭代一个时间跨度?

python - Matplotlib 无法保存动画

javascript - 如何从 AJAX 请求执行 Python 代码?

python - 使用 Python 创建自定义语言

python - Pandas 找到所有用户访问过的不同目的地

python - Python 中的 float ('inf' ) 有什么意义?

python - 在没有\的情况下在Python中分割一条长线

javascript - 使用 flask 和 ajax 的跨源问题

python - 如何计算 Cassandra 中特定列族的行键数(阅读详情)