为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哈士奇WWW 2019-08-11 14:06:02
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)
fromitertoolsimportgroupby
fils=['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)
不理解你所谓的优雅是什么,代码更短?
fromitertoolsimportgroupby
fils=['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
                            
查看完整回答
反对 回复 2019-08-11
?
倚天杖

TA贡献1828条经验 获得超3个赞

fromitertoolsimportgroupby
fils=['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)
                            
查看完整回答
反对 回复 2019-08-11
  • 2 回答
  • 0 关注
  • 290 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信