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

python append 和 列表解析

python append 和 列表解析

开满天机 2019-02-21 04:11:33
问题:将数据库中查出的数据(列表中包含元组)转换为列表中字典。 原数据结构,从数据库查出: cur = [("t1", "d1"), ("t2", "d2")] 转换后数据结构: [{'description': 'd1', 'title': 't1'}, {'description': 'd2', 'title': 't2'}] 方法一,使用append, 出现错误结果 pythoncur = [("t1", "d1"), ("t2", "d2")] post_dict = {} posts = [] for row in cur: post_dict['title'] = row[0] post_dict['description'] = row[1] print "post_dict:",post_dict posts.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]) for row in cur] print "posts:",posts 方法二运行结果,正常 pythonposts: [{'description': 'd1', 'title': 't1'}, {'description': 'd2', 'title': 't2'}]
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

方法一中,你的post_dict是一个字典对象,for循环的操作都是在更新这个对象的keyvalue,自始至终就这一个对象,append多少次都一样。

把字典对象放在循环内创建即可:

pythoncur = [("t1", "d1"), ("t2", "d2")] 
posts = []
for row in cur:
    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} for description, title in cur]

In [3]: r
Out[3]: [{'description': 't1', 'title': 'd1'}, {'description': 't2', 'title': 'd2'}]
查看完整回答
反对 回复 2019-03-01
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

方法一的循环中,post_dict始终指向的是同一个对象。
在for循环中,使用匿名对象就可以了:

for row in cur:
    posts.append({'title':row[0],'description':row[1]})
查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 529 浏览
慕课专栏
更多

添加回答

举报

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