1
我有一個從redis排序的集合。排序後的集合包含對象的ID和它們的排序分數。基於從redis排序的集合排序Django查詢集
接下來,我有一個Django查詢集,其中的對象的排序標識包含在上述的redis排序集中。
我需要根據redis排序集中ID的位置來對此Django查詢集進行排序。什麼是實現這個目標的最快方法?
我想以下幾點:
dictionary = dict(sorted_set) #turning the sorted set into a dictionary
for pk, score in dictionary:
obj = queryset.get(id=pk) #get object with id equalling pk
score = object #assign the object to the 'score' value of this key-value
result = dictionary.values() #making a list of all values, that are now in sorted order
for循環上面的失敗對我來說有too many values to unpack
錯誤 - 我還在調試它。不過,我也覺得可能有更快的方法來做我想做的事情,因此我問了這個問題。提前致謝!
感謝哥們,我會盡快回復你 –
如果查詢集中某些id *不存在*,但存在於sorted_set中?在這種情況下,lambda函數將返回'queryset'中不存在的'key'。結果自動排除這些條目? –
在這種情況下'sorted'排序第一個參數 - queryset的元素。 'key'只是定義瞭如何計算第一個參數的每個元素的排序優先級,因此它會忽略排序集中而不是查詢集中的元素。另一個可能更乾淨地顯示行爲的例子是按長度排序字符串列表 - 「sorted(list_of_strings,key = len)'。任何字符串的長度都可以計算出來,但是隻有初始列表中的那些字符串纔會被排序。 –