在 redis 排序集中存储 python 元组列表,其中元组的第二个元素用作分数
Storing python list of tuples in a redis sorted set where second element of tuple is used as score
我有一个 Python 元组列表,如下所示:
lst = [(22, -150.0), (23, -150.0), (18, -148.5), (15, -99.4), (5, -75.75), (4, -49.2), (13, -49.0), (9, -41.3), (20, -25.5), (17, -22.3), (10, -13.1), (16, -12.5), (14, -9.8), (3, -8.5), (1, -8.4), (12, -1.5), (7, -0.6), (2, -0.4), (6, 1.7), (21, 2.7)]
如何将其传递到 redis 排序集中,以便将每个元组中的第二个值用作分数?我尝试 zadd(sorted_set, *lst)
,但出现错误 value is not a valid float
。
redis.StrictRedis
的 zadd
方法需要
形式的参数
zadd(key, score1, name1, score2, name2, ...)
换句话说,你还需要反转和解包内部元组:
In [6]: r = redis.StrictRedis(...)
In [8]: r.zadd('sset', *(y for x in lst for y in x[::-1]))
Out[8]: 20
Redis.zadd
和 StrictRedis.zadd
的行为不同——有关详细信息,请参阅 README。因此,如果您使用 redis.Redis
而不是 redis.StrictRedis
(您不应该),请执行 not 反向元组:
r.zadd('sset', *(y for x in lst for y in x))
我有一个 Python 元组列表,如下所示:
lst = [(22, -150.0), (23, -150.0), (18, -148.5), (15, -99.4), (5, -75.75), (4, -49.2), (13, -49.0), (9, -41.3), (20, -25.5), (17, -22.3), (10, -13.1), (16, -12.5), (14, -9.8), (3, -8.5), (1, -8.4), (12, -1.5), (7, -0.6), (2, -0.4), (6, 1.7), (21, 2.7)]
如何将其传递到 redis 排序集中,以便将每个元组中的第二个值用作分数?我尝试 zadd(sorted_set, *lst)
,但出现错误 value is not a valid float
。
redis.StrictRedis
的 zadd
方法需要
zadd(key, score1, name1, score2, name2, ...)
换句话说,你还需要反转和解包内部元组:
In [6]: r = redis.StrictRedis(...)
In [8]: r.zadd('sset', *(y for x in lst for y in x[::-1]))
Out[8]: 20
Redis.zadd
和 StrictRedis.zadd
的行为不同——有关详细信息,请参阅 README。因此,如果您使用 redis.Redis
而不是 redis.StrictRedis
(您不应该),请执行 not 反向元组:
r.zadd('sset', *(y for x in lst for y in x))