PythonGroupBy语句
我正在尝试对以下详细信息列表进行分组:PythonGroupBy语句,python,itertools,Python,Itertools,我正在尝试对以下详细信息列表进行分组: details = [('20130325','B'), ('20130320','A'), ('20130325','B'), ('20130320','A')] >>for k,v in itertools.groupby(details,key=operator.itemgetter(0)): >> print k,list(v) 这是上面groupby语句的输出: 20130325 [('20130325', 'B')
details = [('20130325','B'), ('20130320','A'), ('20130325','B'), ('20130320','A')]
>>for k,v in itertools.groupby(details,key=operator.itemgetter(0)):
>> print k,list(v)
这是上面groupby语句的输出:
20130325 [('20130325', 'B')]
20130320 [('20130320', 'A')]
20130325 [('20130325', 'B')]
20130320 [('20130320', 'A')]
但我的预期输出是:
20130325 [('20130325', 'B'),('20130325', 'B')]
20130320 [('20130320', 'A'),('20130320', 'A')]
我在哪里做错了吗?您必须首先对您的详细信息进行排序:
details.sort(key=operator.itemgetter(0))
或
Groupby将连续的匹配记录分组在一起
groupby()的操作类似于Unix中的uniq筛选器。每次键函数的值更改时,它都会生成一个中断或新组(这就是为什么通常需要使用相同的键函数对数据进行排序)。这种行为与SQL的组不同,SQL的组聚合公共元素,而不考虑它们的输入顺序
该项目提供了一个非流式groupby
$ pip install toolz
$ ipython
In [1]: from toolz import groupby, first
In [2]: details = [('20130325','B'), ('20130320','A'), ('20130325','B'), ('20130320','A')]
In [3]: groupby(first, details)
Out[3]:
{'20130320': [('20130320', 'A'), ('20130320', 'A')],
'20130325': [('20130325', 'B'), ('20130325', 'B')]}
$ pip install toolz
$ ipython
In [1]: from toolz import groupby, first
In [2]: details = [('20130325','B'), ('20130320','A'), ('20130325','B'), ('20130320','A')]
In [3]: groupby(first, details)
Out[3]:
{'20130320': [('20130320', 'A'), ('20130320', 'A')],
'20130325': [('20130325', 'B'), ('20130325', 'B')]}