python-進階教程-根據欄位將記錄分組
0.摘要
根據資料中某一元素對資料進行分類是常會遇到的問題,本文通過介紹itertool.groupby()函式,根據字典中某一個值把資料進行分類。
1.itertool.groupby()函式
rows = [
{'address': '5412 N CLARK', 'date': '07/01/2012'},
{'address': '5148 N CLARK', 'date': '07/04/2012'},
{'address': '5800 E 58TH', 'date': '07/02/2012'},
{'address': '2122 N CLARK', 'date': '07/03/2012'},
{'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'},
{'address': '1060 W ADDISON', 'date': '07/02/2012'},
{'address': '4801 N BROADWAY', 'date': '07/01/2012'},
{'address': '1039 W GRANVILLE', 'date': '07/04/2012'},
]
from itertools import groupby
rows.sort(key=lambda r: r['date'])
for date, items in groupby(rows, key=lambda r: r['date']):
print(date)
for i in items:
print(' ', i)
'''
result:
07/01/2012
{'address': '5412 N CLARK', 'date': '07/01/2012'}
{'address': '4801 N BROADWAY', 'date': '07/01/2012'}
07/02/2012
{'address': '5800 E 58TH', 'date': '07/02/2012'}
{'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'}
{'address': '1060 W ADDISON', 'date': '07/02/2012'}
07/03/2012
{'address': '2122 N CLARK', 'date': '07/03/2012'}
07/04/2012
{'address': '5148 N CLARK', 'date': '07/04/2012'}
{'address': '1039 W GRANVILLE', 'date': '07/04/2012'}
'''
原理:itertool.groupby()函式先掃描序列,找出擁有相同值或者由key指定的函式所返回的值,然後將它們分組。
返回值:itertool.groupby()函式建立一個迭代器,在每次迭代中返回一個值(value),一個子迭代器(sub_iterator)。子迭代器可以產生該分組內所有具有該值的項。
為什麼先排序:itertool.groupby()函式只能檢查連續的項!
2.不排序實現分組
由於itertool.groupby()函式需要先進行排序,這在排序複雜度較高的資料中可能會成為一項阻礙,那麼可以考慮使用多值字典。
多值字典的相關內容請各位讀者移步:https://blog.csdn.net/qq_17753903/article/details/83989377
from collections import defaultdict
rows_by_date = defaultdict(list)
for row in rows:
rows_by_date[row['date']].append(row)
for r in rows_by_date['07/01/2012']:
print(r)
#result:
# {'address': '5412 N CLARK', 'date': '07/01/2012'}
# {'address': '4801 N BROADWAY', 'date': '07/01/2012'}
from pprint import pprint
pprint(rows_by_date)
相關文章
- SqlServer根據特定欄位分組後,對需要欄位進行分組拼接SQLServer
- Python實用技法第14篇:根據欄位將記錄分組:itertools.groupby()Python
- golang將切片或陣列根據某個欄位進行分組Golang陣列
- list集合根據某欄位分組
- sql根據多個欄位查詢重複記錄SQL
- js物件陣列(JSON) 根據某個共同欄位 分組物件陣列JSON
- 根據欄位查表名
- 二維陣列根據欄位進行排序陣列排序
- js陣列操作——物件陣列根據某個相同的欄位分組JS陣列物件
- SQL 如何在時間序列中根據欄位變化分組SQL
- Java根據前端返回的欄位名進行查詢資料Java前端
- Laravel7 擴充套件 關聯方式 (根據ids 欄位 關聯多條id記錄)Laravel套件
- jQuery根據表格欄位升序和降序詳解jQuery
- 二維陣列根據某個欄位排序陣列排序
- python-進階教程-對切片進行命名Python
- Java根據前端返回的欄位名進行查詢資料的方法Java前端
- SpringJpa @query 中根據傳入引數(欄位)排序Spring排序
- SQL-分組聚合 - 單欄位分組SQL
- iOS 模組化進階整理記錄iOS
- python-進階教程-使用物件屬性進行排序Python物件排序
- 根據字典,轉成相應的進位制
- jackson根據屬性名動態序列化物件欄位物件
- (一)《SQL進階教程》學習記錄--CASESQL
- pandas 分組合並欄位(qbit)
- (二)《SQL進階教程》學習記錄--GROUP BY、PARTITION BYSQL
- 根據年月份分表
- python-進階教程-通過公共鍵對字典列表排序Python排序
- BIRT 中根據引數實現動態日期分組
- Oracle 中,根據狀態欄位進行自定義排序例(待驗證、待維修、重新維修)Oracle排序
- 根據數字二進位制下 1 的數目排序排序
- 根據介面返回的二進位制流匯出檔案
- JavaScript進階教程日記JavaScript
- Laravel ORM 中,根據關聯查詢的欄位值,對主查詢排名LaravelORM
- IDEA外掛實現根據欄位註釋生成getter/setter方法Javadoc註釋IdeaJava
- 使用spring.cloud.stream來傳送kafka訊息,並根據某欄位將訊息傳送到固定partition上SpringCloudKafka
- awk 中的欄位、記錄和變數變數
- fastadmin 新增欄位記圖片欄位AST
- 力扣 根據數字二進位制下1的數目排序力扣排序