詳解Python中的分組函數(shù)groupby和itertools)
具體代碼如下所示:
from operator import itemgetter #itemgetter用來(lái)去dict中的key,省去了使用lambda函數(shù)
from itertools import groupby #itertool還包含有其他很多函數(shù),比如將多個(gè)list聯(lián)合起來(lái)。。
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]
#通過(guò)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))
#過(guò)濾出分組后的元素個(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),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5菜單欄控件QMenuBar的詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5菜單欄控件QMenuBar的詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-02-02
利用Python命令行傳遞實(shí)例化對(duì)象的方法
最近在工作中遇到了一個(gè)問(wèn)題,需要接收啟動(dòng)腳本傳遞過(guò)來(lái)的實(shí)例化后的對(duì)象,通過(guò)在網(wǎng)上查找資料發(fā)現(xiàn)了兩個(gè)方法,文中通過(guò)實(shí)例代碼就給大家詳細(xì)介紹了這兩種方法,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-11-11
pygame播放視頻并實(shí)現(xiàn)音視頻同步的解決方案
本篇提供了pygame播放視頻的兩個(gè)方案,第一個(gè)方案是網(wǎng)上找的現(xiàn)成的,第二個(gè)方案則是參考了opencv(主流方案)自己逆向思維做的,還未經(jīng)過(guò)實(shí)際驗(yàn)證,感興趣的朋友跟隨小編一起看看吧2023-11-11
Python實(shí)現(xiàn)人工蜂群算法的示例代碼
ABC,即人工蜂群算法(Artificial?Bee?Colony?Algorithm),由Karaboga等人提出,這篇文章主要介紹了人工蜂群算法的概念與Python實(shí)現(xiàn),感興趣的可以了解一下2023-08-08
如何使用Python實(shí)現(xiàn)CartPole游戲
在深度強(qiáng)化學(xué)習(xí)內(nèi)容的介紹中,提出了CartPole游戲進(jìn)行深度強(qiáng)化學(xué)習(xí),現(xiàn)在提供一種用Python簡(jiǎn)單實(shí)現(xiàn)Cart Pole游戲的方法,感興趣的朋友跟隨小編一起看看吧2024-07-07
python+selenium+autoit實(shí)現(xiàn)文件上傳功能
這篇文章主要介紹了python+selenium+autoit實(shí)現(xiàn)文件上傳功能,需要的朋友可以參考下2017-08-08
Python實(shí)現(xiàn)中文數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)中文數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字的方法,涉及Python字符串遍歷、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-05-05

