gpt4 book ai didi

python - 将多个对象的值合并到一个字典中

转载 作者:太空狗 更新时间:2023-10-30 00:06:18 25 4
gpt4 key购买 nike

我正在从数据库中获取这些行:

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 甚至不在最终列表中。我现在觉得很愚蠢,我错过了什么?

最佳答案

首先,将每个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

现在,只需获取 groups 的所有 values,使用 groups.values() 即可获得结果。

注意:如果您想保留基于 blog_id 的元素的原始顺序,那么不要使用普通字典,而是使用 collections.OrderedDict,像这样

from collections import OrderedDict
groups = OrderedDict()
...

关于python - 将多个对象的值合并到一个字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34532993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com