在redis排序集中存储元组的python列表,其中元组的第二个元素用作分数
我有一个元组的Python列表,如下所示:在redis排序集中存储元组的python列表,其中元组的第二个元素用作分数,python,redis,redis-py,Python,Redis,Redis Py,我有一个元组的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.
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)
,但得到的错误是值不是有效的浮点值
redis的zadd
方法。StrictRedis
需要以
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
的行为不同——有关更多详细信息,请参阅。因此,如果您使用redis.redis
而不是redis.StrictRedis
(您不应该这么做),请不要反转元组:
r.zadd('sset', *(y for x in lst for y in x))
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
的行为不同——有关更多详细信息,请参阅。因此,如果您使用redis.redis
而不是redis.StrictRedis
(您不应该这么做),请不要反转元组:
r.zadd('sset', *(y for x in lst for y in x))