Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对列表列表进行分组_Python - Fatal编程技术网

Python 如何对列表列表进行分组

Python 如何对列表列表进行分组,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'

我有一个如下列表:

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)
]
问题是具有dup id但计数不同的第二列。我需要有一个列表,将汇总计数,使列表看起来像这样。python中是否有group by CLUSE

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现在是:

让我们将您的列表命名为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现在是:


我不认为有任何内置的工具,将完全做到你想要的开箱即用。但是,使用collections模块中的defaultdict可以很容易地实现您自己的功能:


这只需要线性运行时间,因此,如果您的数据集很大,它可能比groupby实现更好,后者需要一个Olog n运行时间排序。

我认为没有任何内置工具可以完全按照您的要求进行开箱即用。但是,使用collections模块中的defaultdict可以很容易地实现您自己的功能:

这只需要线性运行时间,因此,如果您的数据集很大,它可能比groupby实现更好,后者需要Olog n运行时间排序。

实现它的漫长道路:

>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> r = defaultdict(list)
>>> for i in l:
...    d[i[1]] += i[2]
...    r[i[0]].append(d)
... 
>>> results = []
>>> for i,v in r.iteritems():
...     for k in v[0]:
...         results.append((i,k,v[0][k]))
... 
>>> results
[('2013-01-04', u'crid9904536154', 1104937),
 ('2013-01-04', u'crid2557171372', 78874),
 ('2013-01-04', u'crid7990924609', 976410)]
实现这一目标的漫长道路:

>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> r = defaultdict(list)
>>> for i in l:
...    d[i[1]] += i[2]
...    r[i[0]].append(d)
... 
>>> results = []
>>> for i,v in r.iteritems():
...     for k in v[0]:
...         results.append((i,k,v[0][k]))
... 
>>> results
[('2013-01-04', u'crid9904536154', 1104937),
 ('2013-01-04', u'crid2557171372', 78874),
 ('2013-01-04', u'crid7990924609', 976410)]

一种极简主义的方式:

from pandas import *
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)]

DataFrame(a).groupby([0,1]).sum().reset_index()
输出:


一种极简主义的方式:

from pandas import *
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)]

DataFrame(a).groupby([0,1]).sum().reset_index()
输出:


grp=λx:x[1]@AdemÖztaş-删除,我们不需要itgrp=lambda x:x[1]@AdemÖztaş-删除,我们不需要它。我不确定您是否可以使用pandas极简主义调用解决方案。它需要安装一个额外的库来完成所有的工作@Blckknght-是的,但是如果你碰巧安装了它,并且你需要做很多这样的事情,它是非常方便的:我不确定你是否可以使用pandas极简主义来调用一个解决方案。它需要安装一个额外的库来完成所有的工作@Blckknght-是的,但是如果你碰巧安装了它,并且你需要做很多这样的事情,它是非常方便的:这真的很令人困惑。你为什么反复地在简历上加d?它总是同一个对象,所以这里有一大堆对它的引用,这真的很混乱。你为什么反复地在简历上加d?它总是同一个对象,所以这里有一大堆对它的引用。