码迷,mamicode.com
首页 > 编程语言 > 详细

《笔记》python itertools的groupby分组数据处理

时间:2017-07-21 18:59:20      阅读:988      评论:0      收藏:0      [点我收藏+]

标签:print   key   code   too   tac   字典   getter   tools   flow   

今天遇到这么一个需求,需要将这样的数据进行分组处理:

[(1, 2), (2, 3), (1, 4), (5, 5), (3, 4), (2, 6)]

处理之后我可能需要得到这样的结果:

[(1, (2, 4)), (2, (3, 6)), (3, (4, )), (5, (5, ))]

找了一些办法,最后想到了以前用过的在itertools里面的包groupby方法,因为比较少使用所以总是忘。它可以轻松的实现分组功能,由于是itertools包里面的,所以它的返回是一个迭代器。这一点要注意下面我们写代码来跑一下。

from itertools import groupby
from operator import itemgetter
x = [(1, 2), (2, 3), (1, 4), (5, 5), (3, 4), (2, 6)]
soooo = sorted(x, key=itemgetter(0))
p = groupby(soooo, key=itemgetter(0))
for i in p:
    print i[0], [_[1] for _ in i[1]]


output:
1 [2, 4]
2 [3, 6]
3 [4]
5 [5]

你可以使用itemgetter也可以直接顺手使用lamda表达式看你自己。

其实笨点的方法,用default dict似乎也可以实现。还是先然后把没组tuple的 第一个元素做key 往后追加,得到一个字典。

之后再用字典.keys()方法获得去重的键,用values的方法获得数组。这种方法似乎还不需要排序,美滋滋。groupby使用之前要排序,否则无法达到效果。

 

Reference:

https://stackoverflow.com/questions/3749512/python-group-by  Python group by

 

《笔记》python itertools的groupby分组数据处理

标签:print   key   code   too   tac   字典   getter   tools   flow   

原文地址:http://www.cnblogs.com/piperck/p/7219037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!