我有一个来自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
错误而失败 - 我还在调试它。尽管如此,我也觉得可能有更快的方法去做我想做的事情,因此我问了这个问题。提前谢谢!
答案 0 :(得分:1)
将for循环替换为:
result = sorted(queryset, key=lambda item: dictionary[item.pk], reverse=True)
如果qs中的任何内容不在redis结果中,这将会例外 - 如果可能发生,请使用dictionary.get(item.pk, ...)
一些合理的默认值而不是dictionary[item.pk]
。