Python如何利用itertools.groupby() 根據欄位將記錄分組
1、需求
有一系列的字典或物件實例,我們想要根據某個特定的欄位來分組迭代資料。
2、解決方案
itertools.groupby()函數在資料分組時特別有用。
實例:
from operator import itemgetter from itertools import groupby rows=[ {'name':'mark','age':18,'uid':'110'}, {'name':'miaomiao','age':28,'uid':'160'}, {'name':'miaomiao2','age':28,'uid':'150'}, {'name':'xiaohei','age':38,'uid':'130'}, ] #首先根据age排序 rows.sort(key=itemgetter('age')) for age,items in groupby(rows,key=itemgetter('age')): print(age) for i in items: print(i)
結果:
18 {'name': 'mark', 'age': 18, 'uid': '110'} 28 {'name': 'miaomiao', 'age': 28, 'uid': '160'} {'name': 'miaomiao2', 'age': 28, 'uid': '150'} 38 {'name': 'xiaohei', 'age': 38, 'uid': '130'}
#3、分析
python實作一鍵多值字典的方法實作
函數groupby()透過掃描序列找出擁有相同值(或是由參數key指定的函數所傳回的值)的序列項,並將它們分組。 groupby()建立了一個迭代器,而在每次迭代時都會傳回一個值(value)和一個子迭代器(sub_iterator),這個迭代器可以產生所有在該分組內具有該值得項。
在這裡重要的是首先要根據age對資料進行排序。因為groupby()不會排序。
如果只是簡單的根據日期將資料分組到一起,放進一個大的資料結構中以允許進行隨機訪問,那麼利用defaultdict()建立一個一鍵多值字典可能會更好:
from collections import defaultdict rows=[ {'name':'mark','age':18,'uid':'110'}, {'name':'miaomiao','age':28,'uid':'160'}, {'name':'miaomiao2','age':28,'uid':'150'}, {'name':'xiaohei','age':38,'uid':'130'}, ] rows_by_age=defaultdict(list) for row in rows: rows_by_age[row['age']].append(row) for a in rows_by_age[28]: print(a)
結果:
{'name': 'miaomiao', 'age': 28, 'uid': '160'} {'name': 'miaomiao2', 'age': 28, 'uid': '150'}
不考慮排序的話,defaultdict方法一般比groupby快。
以上是Python如何利用itertools.groupby() 根據欄位將記錄分組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

關於Linux系統自帶Python解釋器的刪除問題許多Linux發行版在安裝時會預裝Python解釋器,它並非通過軟件包管理器�...

使用自定義裝飾器時的Pylance類型檢測問題解決方法在Python編程中,裝飾器是一種強大的工具,可以用於添加行�...

Python3.6環境下加載pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

Python異步庫之間的兼容性問題在Python中,異步編程已經成為處理高並發和I/O...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

使用信號殺死父進程時,子進程繼續運行的問題及解決方案在Python編程中,通過信號殺死父進程後,子進程仍然...
