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
- golang將切片或陣列根據某個欄位進行分組Golang陣列
- list集合根據某欄位分組
- Python實用技法第14篇:根據欄位將記錄分組:itertools.groupby()Python
- sql根據多個欄位查詢重複記錄SQL
- js物件陣列(JSON) 根據某個共同欄位 分組物件陣列JSON
- 根據欄位查表名
- 二維陣列根據欄位進行排序陣列排序
- js陣列操作——物件陣列根據某個相同的欄位分組JS陣列物件
- js記一個根據欄位排序物件函式JS排序物件函式
- SQL 如何在時間序列中根據欄位變化分組SQL
- 根據欄位名查詢所有表
- [PY3]——根據某個特定的欄位來分組迭代訪問一個欄位或序列?/ itertools.groupby( )函式函式
- oracle根據分組查百分比Oracle
- 二維陣列根據某個欄位排序陣列排序
- jQuery根據表格欄位升序和降序詳解jQuery
- python-進階教程-對切片進行命名Python
- Laravel7 擴充套件 關聯方式 (根據ids 欄位 關聯多條id記錄)Laravel套件
- SQL根據分組求連續範圍SQL
- 根據不同欄位,升降序排列查詢結果
- PHP二維陣列根據某個欄位排序PHP陣列排序
- SQL Server中根據某個欄位,ID欄位自動增長的實現SQLServer
- SpringJpa @query 中根據傳入引數(欄位)排序Spring排序
- 根據特殊識別符號,將一行轉多行記錄符號
- pandas 分組合並欄位(qbit)
- python-進階教程-使用物件屬性進行排序Python物件排序
- Gridview繫結資料庫的欄位,根據條件欄位顏色改變View資料庫
- 根據字典,轉成相應的進位制
- (一)《SQL進階教程》學習記錄--CASESQL
- (二)《SQL進階教程》學習記錄--GROUP BY、PARTITION BYSQL
- 根據時間欄位匯入資料的問題總結
- BIRT 中根據引數實現動態日期分組
- Oracle 中,根據狀態欄位進行自定義排序例(待驗證、待維修、重新維修)Oracle排序
- 根據block的16進位制格式轉化成10進製表示BloC
- MySQL GROUP BY分組取欄位最大值MySql
- jackson根據屬性名動態序列化物件欄位物件
- Mysql根據指定欄位的int值查出在當前列表的排名MySql
- 根據上一行填充本行的空白欄位,SQL處理方式SQL