根据redis中排序集的排序对Django查询集进行排序

时间:2016-07-27 01:00:08

标签: python django sorting redis

我有一个来自redis的排序集。有序集包含对象的ID和它们的排序分数。

接下来,我有一个Django查询集,由排序的id包含在上述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错误而失败 - 我还在调试它。尽管如此,我也觉得可能有更快的方法去做我想做的事情,因此我问了这个问题。提前谢谢!

1 个答案:

答案 0 :(得分:1)

将for循环替换为:

result = sorted(queryset, key=lambda item: dictionary[item.pk], reverse=True)

如果qs中的任何内容不在redis结果中,这将会例外 - 如果可能发生,请使用dictionary.get(item.pk, ...)一些合理的默认值而不是dictionary[item.pk]