mar*_*ddy 3 python 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)
Run Code Online (Sandbox Code Playgroud)
这是上面groupby语句的输出:
20130325 [('20130325', 'B')]
20130320 [('20130320', 'A')]
20130325 [('20130325', 'B')]
20130320 [('20130320', 'A')]
Run Code Online (Sandbox Code Playgroud)
但我的预期输出是:
20130325 [('20130325', 'B'),('20130325', 'B')]
20130320 [('20130320', 'A'),('20130320', 'A')]
Run Code Online (Sandbox Code Playgroud)
我在某处做错了吗?
您必须先对详细信息进行排序:
details.sort(key=operator.itemgetter(0))
Run Code Online (Sandbox Code Playgroud)
要么
fst = operator.itemgetter(0)
itertools.groupby(sorted(details, key=fst), key=fst)
Run Code Online (Sandbox Code Playgroud)
Groupby将连续匹配记录组合在一起.
groupby()的操作类似于Unix中的uniq过滤器.每次键函数的值发生变化时,它都会生成一个中断或新组(这就是为什么通常需要使用相同的键函数对数据进行排序).这种行为不同于SQL的GROUP BY,它聚合了常见元素而不管它们的输入顺序如何.
| 归档时间: |
|
| 查看次数: |
492 次 |
| 最近记录: |