python列表列表推导式为何加了if之后数据就没了求解答!

fromitertoolsimportgroupby
fils=['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)))
看了一下几位大佬的回复,似乎也没有更优雅的解决办法。
哈士奇WWW
浏览 291回答 2
2回答

森栏

因为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

倚天杖

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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript