在Django的总结“values_list”的结果产生列表查询集

问题描述:

通过Django的queryset的电话,我生成整数元组的列表:在Django的总结“values_list”的结果产生列表查询集

[(0,1),(0,2),(0,4),(5,8),.......] 

我,而不是需要生成其总结两个列表元组里面的元素在一起,即

[1,2,4,13,.....] 

如何在Django查询集查询中完成该操作?

我到目前为止已经编写的查询:

photos_score_list = Photo.objects.filter(upload_time__gte=yesterday).annotate(unique_comments=Count('photocomment__submitted_by', distinct=True)).values_list('vote_score','unique_comments') 

我不知道Django的,但是当你有这样的:

l = [(0,1),(0,2),(0,4),(5,8)] 

可以计算每个元素的总和在一行中使用列表理解:

l2 = [sum(x) for x in l] 

结果:

[1, 2, 4, 13] 

应用于您的问题:

photos_score_sum = [sum(x) for x in Photo.objects.filter(upload_time__gte=yesterday).annotate(unique_comments=Count('photocomment__submitted_by', distinct=True)).values_list('vote_score','unique_comments')] 
+0

有趣,坚持下去,我会给它一个镜头。 –

+0

如果这个优雅的解决方案不适用于Django queryset查询,那么'functools.reduce'和'operator.add'可以提供帮助吗?参看与一个不同的问题(IN /或)在这里:http://stackoverflow.com/questions/20177749/django-filter-queryset-on-tuples-of-values-for-multiple-columns – Dilettant

+0

如果它就像在Django querydict那么你可能需要首先调用'list()'。 – roganjosh

一旦你的元组的列表中,你可以使用列表理解产生类似下面的第二个列表:

>>> tuples_list = [(0,1),(0,2),(0,4),(5,8)] 
>>> res_list = [i+j for i,j in tuples_list] 
>>> res_list 
[1, 2, 4, 13] 

在我们列表理解,我们返回元组(i,j),tuples_list总和i+j,结果按res_list排序。