[英]Python: Fastest way to make dict from list of dicts
带有注释的Queryset给了我这样的结果列表:
[{'completed__sum': 1, 'offer__count': 2, 'offer': 1}, {'completed__sum': 0, 'offer__count': 1, 'offer': 2}]
我想得到这样的东西:
{1:{'completed__sum': 1, 'offer__count': 2},2:{'completed__sum': 0, 'offer__count': 1}}
其中键1
和2
是'offer': X
字段的值。
将查询结果转换为所需形式的最快方法是什么? 还是有什么方法可以接收这种格式的queryset结果?
这是我的查询集:
Progress.objects.filter(user=self.request.user).values('offer').annotate(Count('offer')).annotate(Sum('completed'))
我的模特:
class Progress(models.Model):
user = models.ForeignKey(to=User)
offer = models.ForeignKey(to=Offer)
completed = models.BooleanField(default=False)
适用于python 2.6 +
将dict构造函数与enumerate一起使用。
list_of_dicts = [
{'completed__sum': 1, 'offer__count': 2, 'offer': 1},
{'completed__sum': 0, 'offer__count': 1, 'offer': 2}]
dictionary = dict((d['offer'], dict((k, v) for k, v in d.items() if k != 'offer')) for d in list_of_dicts)
print dictionary
>>>
{1: {'completed__sum': 1, 'offer__count': 2}, 2: {'completed__sum': 0, 'offer__count': 1}}
编辑:刚刚找到了一种更好的方法来做到这一点。 如果您不再使用列表,仅保留最终结果。
dictionary = dict((d.pop('offer'), d) for d in list_of_dicts)
>>> {x['offer']: dict(y for y in x.iteritems() if y[0] != 'offer') for x in [{'completed__sum': 1, 'offer__count': 2, 'offer': 1}, {'completed__sum': 0, 'offer__count': 1, 'offer': 2}]}
{1: {'completed__sum': 1, 'offer__count': 2}, 2: {'completed__sum': 0, 'offer__count': 1}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.