python中列表或字典队列的Redis排序语法

python中列表或字典队列的Redis排序语法,python,web-services,sorting,dictionary,redis,Python,Web Services,Sorting,Dictionary,Redis,我正在尝试为一个我正在帮助一位好朋友的网站排序Redis队列,但我不清楚python中排序的语法。当我得到它时,该网站已经在后端大量使用了Redis,所以我一直在尝试如何使用Redis和现有的架构。我要根据特定字段对以下队列进行排序: personal_queue = RedisQueue(name=personal_queuename, host='localhost', port=6379, db=0) 其中personal_queuename是一个字符串 该队列在网站当前实现的每个条目(

我正在尝试为一个我正在帮助一位好朋友的网站排序Redis队列,但我不清楚python中排序的语法。当我得到它时,该网站已经在后端大量使用了Redis,所以我一直在尝试如何使用Redis和现有的架构。我要根据特定字段对以下队列进行排序:

personal_queue = RedisQueue(name=personal_queuename, host='localhost', port=6379, db=0)
其中personal_queuename是一个字符串

该队列在网站当前实现的每个条目(略为简化)中包含以下信息:

':'.join((str(partner_id), str(relative_rating)))
所以它有点像一个字典队列,除了实际上没有任何键,除非你认为队列中的索引是一个键,它基本上映射到一个字符串列表。我想按照相对_评级字符串(应转换为整数)对该队列进行排序,以便相对_评级值最小的条目位于队列的顶部/前部。我的问题是,如果这是可能的,如何做到这一点,和/或如果当前的实现不可能,如何重新组织队列以按此排序。我还将对其他稍有不同的队列进行排序,因此知道如何以这种方式排序将允许我对具有相同基本结构的其他事物进行排序

我见过有人提到如何使用通用Redis语法进行排序,但我找不到任何具体说明如何进行排序的方法1)具体使用python代码,或2)对我想要使用的特定字段进行排序,因为它们有点难以找到(这不是我的想法,但它是有意义的,也许Redis只需要以这种方式组织数据?)。我想我可能需要以某种方式修改数据,但由于我不熟悉Redis,需要稍微更改一下站点的后端,即使有一个更简单的问题,我也不确定传递给排序函数的值是什么

我发现语法基本上是:

sort(personal_queuename, by=None, get=None)
但我不知道应该用什么来代替无。我对这一点很陌生,所以如果你能解释每个领域的信息类型以及在我的案例中对应的信息,这将对我有很大帮助。我可以稍微改变一下数据,但我需要能够将合作伙伴ID映射到相对的评分(例如,我现在的做法)最好将合作伙伴ID映射到多个字段,如下所示:

':'.join((str(partner_id), other_field1, other_field2, str(relative_rating)))
我需要使用Redis队列来实现这一点,因为还有另一个后端实现(它以前没有对队列进行排序,但仍然广泛地使用它们的数据)

RedisQueue是此类:

import redis

class RedisQueue(object):

    def __init__(self, name, **redis_kwargs):
        '''Initializes connection to specified redis queue.
           The default connection parameters are: host='localhost', port=6379, db=0'''
        self.__db = redis.Redis(**redis_kwargs)
        self.key = name

    def qsize(self):
        """Return the size of the queue."""
        return self.__db.llen(self.key)

    def empty(self):
        """Return True if the queue is empty, False otherwise."""
        return self.qsize() == 0

    def push(self, item):
        """Place an item into the queue."""
        self.__db.rpush(self.key, item)

    def pop(self, block=False, timeout=None):
        """Remove and return an item from the queue.
        If optional argument block is true and timeout is None (the default), block
        if necessary until an item becomes available."""
        if block:
            item = self.__db.blpop(self.key, timeout=timeout)
            if item:
                item = item[1]
        else:
            item = self.__db.lpop(self.key)
        return item

    def rem(self, item):
        self.__db.lrem(self.key, item, 1)

    def all(self):
        return self.__db.lrange(self.key, 0, -1)

    def get_nowait(self):
        """Equivalent to get(False)."""
        return self.get(False)
我已经看过了这些链接,但不知道如何访问我想要排序的数据字段(使用python语法,这对我来说很关键-我知道有一些答案引用了通用的Redis语法):


谢谢!

你看了吗?不确定这与我的工作有什么关系…这看起来像是一个单独的模块,我在存储库中找不到任何关于排序的内容。我还说我不能仅仅替换现有的体系结构…我只想知道如何使用Redis python的排序功能…我不知道Redis队列(或redis术语中的列表)有任何排序功能这不是一个常规的redis列表(队列不是列表),因此它自己的类存在(请参阅我包含的构造函数),而redis列表确实有一个排序函数。请参阅sort,它对列表、集合或排序集进行排序。该函数肯定是真实的,我只是询问语法。。。