詳解Python中的分組函數(shù)groupby和itertools)
具體代碼如下所示:
from operator import itemgetter #itemgetter用來去dict中的key,省去了使用lambda函數(shù) from itertools import groupby #itertool還包含有其他很多函數(shù),比如將多個(gè)list聯(lián)合起來。。 d1={'name':'zhangsan','age':20,'country':'China'} d2={'name':'wangwu','age':19,'country':'USA'} d3={'name':'lisi','age':22,'country':'JP'} d4={'name':'zhaoliu','age':22,'country':'USA'} d5={'name':'pengqi','age':22,'country':'USA'} d6={'name':'lijiu','age':22,'country':'China'} lst=[d1,d2,d3,d4,d5,d6] #通過country進(jìn)行分組: lst.sort(key=itemgetter('country')) #需要先排序,然后才能groupby。lst排序后自身被改變 lstg = groupby(lst,itemgetter('country')) #lstg = groupby(lst,key=lambda x:x['country']) 等同于使用itemgetter() for key,group in lstg: for g in group: #group是一個(gè)迭代器,包含了所有的分組列表 print key,g
返回:
China {'country': 'China', 'age': 20, 'name': 'zhangsan'} China {'country': 'China', 'age': 22, 'name': 'lijiu'} JP {'country': 'JP', 'age': 22, 'name': 'lisi'} USA {'country': 'USA', 'age': 19, 'name': 'wangwu'} USA {'country': 'USA', 'age': 22, 'name': 'zhaoliu'} USA {'country': 'USA', 'age': 22, 'name': 'pengqi'} print [key for key,group in lstg] #返回:['China', 'JP', 'USA'] print [(key,list(group)) for key,group in lstg] #返回的list中包含著三個(gè)元組: [('China', [{'country': 'China', 'age': 20, 'name': 'zhangsan'}, {'country': 'China', 'age': 22, 'name': 'lijiu'}]), ('JP', [{'country': 'JP', 'age': 22, 'name': 'lisi'}]), ('USA', [{'country': 'USA', 'age': 19, 'name': 'wangwu'}, {'country': 'USA', 'age': 22, 'name': 'zhaoliu'}, {'country': 'USA', 'age': 22, 'name': 'pengqi'}])] print dict([(key,list(group)) for key,group in lstg]) #返回的是一個(gè)字典: {'JP': [{'country': 'JP', 'age': 22, 'name': 'lisi'}], 'China': [{'country': 'China', 'age': 20, 'name': 'zhangsan'}, {'country': 'China', 'age': 22, 'name': 'lijiu'}], 'USA': [{'country': 'USA', 'age': 19, 'name': 'wangwu'}, {'country': 'USA', 'age': 22, 'name': 'zhaoliu'}, {'country': 'USA', 'age': 22, 'name': 'pengqi'}]} print dict([(key,len(list(group))) for key,group in lstg]) #返回每個(gè)分組的個(gè)數(shù): {'JP': 1, 'China': 2, 'USA': 3} #返回包含有2個(gè)以上元素的分組 print [key for key,group in groupby(sorted(lst,key=itemgetter('country')),itemgetter('country')) if len(list(group))>=2] #返回:['China', 'USA'] lstg = groupby(sorted(lst,key=itemgetter('country')),key=itemgetter('country')) lstgall=[(key,list(group)) for key,group in lstg ] print dict(filter(lambda x:len(x[1])>2,lstgall)) #過濾出分組后的元素個(gè)數(shù)大于2個(gè)的分組,返回: {'USA': [{'country': 'USA', 'age': 19, 'name': 'wangwu'}, {'country': 'USA', 'age': 22, 'name': 'zhaoliu'}, {'country': 'USA', 'age': 22, 'name': 'pengqi'}]}
自定義分組:
from itertools import groupby lst=[2,8,11,25,43,6,9,29,51,66] def gb(num): if num <= 10: return 'less' elif num >=30: return 'great' else: return 'middle' print [(k,list(g))for k,g in groupby(sorted(lst),key=gb)]
返回:
[('less', [2, 6, 8, 9]), ('middle', [11, 25, 29]), ('great', [43, 51, 66])]
總結(jié)
以上所述是小編給大家介紹的Python中的分組函數(shù)groupby和itertools),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
PyTorch如何利用parameters()獲取模型參數(shù)
這篇文章主要介紹了PyTorch如何利用parameters()獲取模型參數(shù)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Python使用sftp實(shí)現(xiàn)傳文件夾和文件
這篇文章主要為大家詳細(xì)介紹了Python使用sftp實(shí)現(xiàn)傳文件夾和文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04Python獲取當(dāng)前頁面內(nèi)所有鏈接的四種方法對比分析
這篇文章主要介紹了Python獲取當(dāng)前頁面內(nèi)所有鏈接的方法,結(jié)合實(shí)例形式對比分析了Python常用的四種獲取頁面鏈接的方法,并附帶了iframe框架內(nèi)鏈接的獲取方法,需要的朋友可以參考下2017-08-08Python使用scipy進(jìn)行曲線擬合的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Python使用scipy進(jìn)行曲線擬合的相關(guān)資料,Scipy優(yōu)化和擬合采用的是optimize模塊,該模塊提供了函數(shù)最小值(標(biāo)量或多維)、曲線擬合和尋找等式的根的有用算法,需要的朋友可以參考下2022-05-05Python 面向?qū)ο蟛糠种R點(diǎn)小結(jié)
這篇文章主要介紹了Python 面向?qū)ο蟛糠种R點(diǎn),總結(jié)分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類、對象、實(shí)例等相關(guān)概念、原理與使用技巧,需要的朋友可以參考下2020-03-03python3.6 +tkinter GUI編程 實(shí)現(xiàn)界面化的文本處理工具(推薦)
這篇文章主要介紹了python3.6 +tkinter GUI編程 實(shí)現(xiàn)界面化的文本處理工具(推薦)的相關(guān)資料,需要的朋友可以參考下2017-12-12pandas中DataFrame字典互轉(zhuǎn)的實(shí)現(xiàn)
在數(shù)據(jù)處理和分析中,Pandas是一個(gè)非常強(qiáng)大的Python庫,本文主要介紹了pandas中DataFrame字典互轉(zhuǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04Python使用StringIO和BytesIO讀寫內(nèi)存數(shù)據(jù)
這篇文章介紹了Python使用StringIO和BytesIO讀寫內(nèi)存數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05Python實(shí)現(xiàn)視頻目標(biāo)檢測與軌跡跟蹤流程詳解
通過閱讀相關(guān)文獻(xiàn)及測試,找到了一種基于多模板匹配的改進(jìn)方法,可以對遙感視頻衛(wèi)星中的移動目標(biāo)進(jìn)行探測,并繪制其軌跡。根據(jù)實(shí)驗(yàn)結(jié)果發(fā)現(xiàn),可以比較有效的對運(yùn)動目標(biāo)進(jìn)行跟蹤2023-01-01