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

python append 和 列表解析

python append 和 列表解析

慕姐8265434 2019-04-23 15:12:56
问题:将数据库中查出的数据(列表中包含元组)转换为列表中字典。原数据结构,从数据库查出:cur=[("t1","d1"),("t2","d2")]转换后数据结构:[{'description':'d1','title':'t1'},{'description':'d2','title':'t2'}]方法一,使用append,出现错误结果pythoncur=[("t1","d1"),("t2","d2")]post_dict={}posts=[]forrowincur:post_dict['title']=row[0]post_dict['description']=row[1]print"post_dict:",post_dictposts.append(post_dict)print"posts:",posts方法一运行结果:pythonpost_dict:{'description':'d1','title':'t1'}posts:[{'description':'d1','title':'t1'}]post_dict:{'description':'d2','title':'t2'}posts:[{'description':'d2','title':'t2'},{'description':'d2','title':'t2'}]方法二,使用列表解析,结果正常pythoncur=[("a","a1"),("b","b1")]posts=[]posts=[dict(title=row[0],description=row[1])forrowincur]print"posts:",posts方法二运行结果,正常pythonposts:[{'description':'d1','title':'t1'},{'description':'d2','title':'t2'}]
查看完整描述

2 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

方法一中,你的post_dict是一个字典对象,for循环的操作都是在更新这个对象的key和value,自始至终就这一个对象,append多少次都一样。
把字典对象放在循环内创建即可:
pythoncur=[("t1","d1"),("t2","d2")]
posts=[]
forrowincur:
post_dict={}
post_dict['title']=row[0]
post_dict['description']=row[1]
print"post_dict:",post_dict
posts.append(post_dict)
print"posts:",posts
优先考虑列表解析,另,本例的tupel列表可以用循环解包,大致如下:
pythonIn[1]:cur=[("t1","d1"),("t2","d2")]
In[2]:r=[{'description':description,'title':title}fordescription,titleincur]
In[3]:r
Out[3]:[{'description':'t1','title':'d1'},{'description':'t2','title':'d2'}]
                            
查看完整回答
反对 回复 2019-04-23
?
Helenr

TA贡献1780条经验 获得超4个赞

方法一的循环中,post_dict始终指向的是同一个对象。
在for循环中,使用匿名对象就可以了:
forrowincur:
posts.append({'title':row[0],'description':row[1]})
                            
查看完整回答
反对 回复 2019-04-23
  • 2 回答
  • 0 关注
  • 351 浏览
慕课专栏
更多

添加回答

举报

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