Python 通过对';值列表';在Django queryset
通过Django queryset调用,我将生成一个整数元组列表:Python 通过对';值列表';在Django queryset,python,django,Python,Django,通过Django queryset调用,我将生成一个整数元组列表: [(0,1),(0,2),(0,4),(5,8),.......] 相反,我需要生成一个列表,将元组中的两个元素相加,即 [1,2,4,13,.....] 如何在Django queryset查询中实现这一点 到目前为止,我写的查询是: photos_score_list = Photo.objects.filter(upload_time__gte=yesterday).annotate(unique_comments=C
[(0,1),(0,2),(0,4),(5,8),.......]
相反,我需要生成一个列表,将元组中的两个元素相加,即
[1,2,4,13,.....]
如何在Django queryset查询中实现这一点
到目前为止,我写的查询是:
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')]
我不知道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]
在列表理解中,我们在
tuples\u list
中返回tuple(i,j)
,求和i+j
,结果在res\u list
中排序,一旦您有了该元组列表,您可以使用列表理解生成第二个列表,如下所示:
>>> 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]
在我们的列表理解中,我们在
tuples\u列表中返回tuple(i,j)
,求和i+j
,结果在res\u列表中排序有趣的是,稍等,我会尝试一下。如果这个优雅的解决方案不适用于Django queryset查询,可能是functools.reduce
和操作符。add
有帮助吗?这里有一个不同的问题(IN/or):如果它类似于Django中的querydict,那么您可能必须首先对它调用list()
。不确定您是否需要它,但您也可以使用,因为Python 3中的map
返回迭代器。因此map(sum,l)
。当您使用map
时,必须将其转换为list,这样listcomps在python3中肯定占上风。我已经停止使用map
和filter
有趣的是,请稍等,我会试一试。如果这个优雅的解决方案不适用于Django queryset查询,可能是functools。reduce
和操作符。add
会有帮助吗?这里有一个不同的问题(IN/or):如果它类似于Django中的querydict,那么您可能必须首先对它调用list()
。不确定您是否需要它,但您也可以使用,因为Python 3中的map
返回迭代器。因此map(sum,l)
。当您使用map
时,必须将其转换为list,这样listcomps在python3中肯定占上风。我已停止使用map
&filter