我从db:
获取这些行blog_id='12', field_name='title', translation='title12 in en', lang='en'
blog_id='12', field_name='desc', translation='desc12 in en', lang='en'
blog_id='13', field_name='title', translation='title13 in en', lang='en'
blog_id='13', field_name='desc', translation='desc13 in en', lang='en'
....
我想为每个blog_id构建一个字典:例如
[
{'blog': '12', 'title': 'title12 in en', 'desc': 'desc12 in en'},
{'blog': '13', 'title': 'title13 in en', 'desc': 'desc13 in en'},
....
]
我正在尝试这种方式:
res = []
dict_ = {}
for trans in translations: # 'translations' is QuerySet, already filtered by 'en'
if trans.blog_id in dict_.values():
dict_[trans.field_name] = trans.translation
else:
dict_['blog'] = trans.blog_id
dict_[trans.field_name] = trans.translation
res.append(dict_)
但这太错了,res
包含blog 13
3次,blog 12
甚至不在最终列表中。我现在感觉很蠢,我错过了什么?
答案 0 :(得分:4)
首先,累积字典中每个blog_id
对应的所有数据,如
groups = {}
for trans in translations:
groups.setdefault(trans.blog_id, {})[trans.field_name] = trans.translation
现在,将相应的blog_id
附加到所有累积的词典
for key in groups:
groups[key]['blog'] = key
现在,只需获取values
的所有groups
,groups.values()
即可获得结果。
注意:如果您想根据blog_id
保留元素的原始顺序,那么请使用collections.OrderedDict
,而不是使用普通字典,1}} p>
from collections import OrderedDict
groups = OrderedDict()
...