在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')]
答
一旦你的元组的列表中,你可以使用列表理解产生类似下面的第二个列表:
>>> 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
排序。
有趣,坚持下去,我会给它一个镜头。 –
如果这个优雅的解决方案不适用于Django queryset查询,那么'functools.reduce'和'operator.add'可以提供帮助吗?参看与一个不同的问题(IN /或)在这里:http://stackoverflow.com/questions/20177749/django-filter-queryset-on-tuples-of-values-for-multiple-columns – Dilettant
如果它就像在Django querydict那么你可能需要首先调用'list()'。 – roganjosh