2016-12-03 121 views
0

通過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') 

回答

1

我不知道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

1

一旦你的元組的列表中,你可以使用列表理解產生類似下面的第二個列表:

>>> 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排序。