Python groupby迭代器未在字典理解中添加到列表
我有一个返回列表的db查询。然后我做了一个字典理解,如下所示:Python groupby迭代器未在字典理解中添加到列表,python,dictionary,Python,Dictionary,我有一个返回列表的db查询。然后我做了一个字典理解,如下所示: results = {product: [g for g in group] for product, group in groupby(db_results, lambda x: x.product_id)} 问题是字典的值只返回1个值。我假设这与组是迭代器这一事实有关 下面返回了组中的每个项目,因此我知道它们在那里: groups = groupby(db_results, lambda x: x.product_id) fo
results = {product: [g for g in group] for product, group in groupby(db_results, lambda x: x.product_id)}
问题是字典的值只返回1个值。我假设这与组是迭代器这一事实有关
下面返回了组中的每个项目,因此我知道它们在那里:
groups = groupby(db_results, lambda x: x.product_id)
for k,g in groups:
if k==1001:
print list(g)
我试图在一个列表中获取上面g的所有值,该列表的键是dictionary的键
我尝试过许多变化,如:
blah = dict((k,list(v)) for k,v in groupby(db_results, key=lambda x: x.product_id))
但是我不能正确地进行排序。如果您坚持使用
groupby
,那么您需要确保输入按分组时使用的键排序,但是,我建议您改用defaultdict
:
from collections import defaultdict
blah = defaultdict(list)
for item in db_results:
blah[item.product_id].append(item)
什么是
db\u结果
?您能否提供一个可运行的示例,用示例数据说明问题?[g代表g在组中]
不是一个合理的列表理解,因为您从一个简单的列表(组)
中得到相同的结果。另外,如果k=1001:是一个语法错误,那么您还没有向我们显示您的真实代码。db_结果是一个sqlalchemy对象列表。我在尝试[g代表g in group],因为我认为group是一个迭代器,因为当我在'g'上循环时,它返回迭代器对象。