问题:将数据库中查出的数据(列表中包含元组)转换为列表中字典。
原数据结构,从数据库查出:
cur = [("t1", "d1"), ("t2", "d2")]
转换后数据结构:
[{'description': 'd1', 'title': 't1'}, {'description': 'd2', 'title': 't2'}]
方法一,使用append, 出现错误结果
python
cur = [("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
方法一运行结果:
python
post_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'}]
方法二,使用列表解析,结果正常
python
cur = [("a", "a1"), ("b", "b1")] posts = [] posts = [dict(title=row[0], description=row[1]) for row in cur] print "posts:",posts
方法二运行结果,正常
python
posts: [{'description': 'd1', 'title': 't1'}, {'description': 'd2', 'title': 't2'}]
方法一中,你的
post_dict
是一个字典对象,for
循环的操作都是在更新这个对象的key
和value
,自始至终就这一个对象,append
多少次都一样。把字典对象放在循环内创建即可:
优先考虑列表解析,另,本例的tupel列表可以用循环解包,大致如下: