在 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.StrictRediszadd 方法需要

形式的参数
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.zaddStrictRedis.zadd 的行为不同——有关详细信息,请参阅 README。因此,如果您使用 redis.Redis 而不是 redis.StrictRedis(您不应该),请执行 not 反向元组:

r.zadd('sset', *(y for x in lst for y in x))