fromitertoolsimportgroupbyfils=['a.jpg','a.png','b.jpg','c.jpg','c.png']res=groupby(fils,lambdas:s.split('.')[0])list_res=[(key,list(group))forkey,groupinresiflen(list(group))>1]print(list_res)我目的是分组后,过滤掉文件名只有1个的文件,例如过滤掉这里的b。但是在加了iflen(list(group))>1之后,输出是[('a',[]),('c',[])],所有group部分的结果都变成[]了。如果不加if,输出是[('a',['a.jpg','a.png']),('b',['b.jpg']),('c',['c.jpg','c.png'])],虽然没有达到我的结果,但是起码group部分的值保留了下来。请问这个if部分,应该怎么改,才能达到我要的效果,也就是输出[('a',['a.jpg','a.png']),('c',['c.jpg','c.png'])]。其实我已经用另一个方法做出来的。fils=['a.jpg','a.png','b.jpg','c.jpg','c.png']res=groupby(fils,lambdas:s.split('.')[0])list_res=[(key,list(group))forkey,groupinres]print(dict(filter(lambdax:len(x[1])>1,list_res)))看了一下几位大佬的回复,似乎也没有更优雅的解决办法。
2 回答
森栏
TA贡献1810条经验 获得超5个赞
因为k,g的g是一个迭代器对象,也就是说使用list(g)之后里面已经没有数据了,所以并不能二次使用list(g)fromitertoolsimportgroupbyfils=['a.jpg','a.png','b.jpg','c.jpg','c.png']lst=[]fork,gingroupby(fils,lambdas:s.split('.')[0]):lst_g=list(g)iflen(lst_g)>1:lst.append((k,lst_g))print(lst)不理解你所谓的优雅是什么,代码更短?fromitertoolsimportgroupbyfils=['a.jpg','a.png','b.jpg','c.jpg','c.png']lst_g=[(k,list(g))fork,gingroupby(fils,lambdas:s.split('.')[0])]lst=[(k,g)fork,ginlst_giflen(g)>1]printlst
倚天杖
TA贡献1828条经验 获得超3个赞
fromitertoolsimportgroupbyfils=['a.jpg','a.png','b.jpg','c.jpg','c.png']res=groupby(fils,lambdas:s.split('.')[0])list_res=[]forkey,valueinres:value=list(value)iflen(value)>1:list_res.append((key,value))print(list_res)
添加回答
举报
0/150
提交
取消