《筆記》Python itertools的groupby分組數據處理


今天遇到這么一個需求,需要將這樣的數據進行分組處理:

[(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM