我保存这样的Redis中的列表:
redis.lpush('foo', [1,2,3,4,5,6,7,8,9])
然后我得到的名单后面是这样的:
redis.lrange('foo', 0, -1)
我得到的东西是这样的:
[b'[1, 2, 3, 4, 5, 6, 7, 8, 9]']
我怎样才能将其转换为实际的Python列表?
另外,我没有看到任何定义RESPONSE_CALLBACKS
,可以帮助? 我缺少的东西吗?
一个可能的解决方案(这在我看来很烂)可以是:
result = redis.lrange('foo',0, -1)[0].decode()
result = result.strip('[]')
result = result.split(', ')
# lastly, if you know all your items in the list are integers
result = [int(x) for x in result]
UPDATE
好了,我得到了解决。
实际上, lpush
功能要求所有的列表项被作为参数,而不是一个单一的列表过去了。 从Redis的-PY源函数签名清楚...
def lpush(self, name, *values):
"Push ``values`` onto the head of the list ``name``"
return self.execute_command('LPUSH', name, *values)
什么我上面做的是发送一个列表作为参数,然后将其发送到Redis的作为单个项目。
我要拆包,而不是作为答案建议名单:
redis.lpush('foo', *[1,2,3,4,5,6,7,8,9])
返回的结果我希望...
redis.lrange('foo', 0, -1)
[b'9', b'8', b'7', b'6', b'5', b'4', b'3', b'2', b'1']