2016-12-03 40 views
0

我的元組,像這樣一個Python列表:貯藏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的有序set,使得每個元組中的第二個值用作分數?我試過zadd(sorted_set, *lst),但是我得到錯誤value is not a valid float

回答

1

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(你不應該)做反向元組:

r.zadd('sset', *(y for x in lst for y in x)) 
相關問題