Redis: How to parse a list result
python, redis
Solution
I think you're bumping into semantics which are similar to the distinction between list.append() and list.extend(). I know that this works for me:
myredis.lpush('foo', *[1,2,3,4])
... note the * (map-over) operator prefixing the list!
Problem
I am storing a list in Redis like this: ``` redis.lpush('foo', [1,2,3,4,5,6,7,8,9]) ``` And then I get the list back like this: ``` redis.lrange('foo', 0, -1) ``` and I get something like this: ``` [b'[1, 2, 3, 4, 5, 6, 7, 8, 9]'] ``` How can I convert this to actual Python list? Also, I don't see anything defined in `RESPONSE_CALLBACKS` that can help? Am I missing something? A possible solution (which in my opinion sucks) can be: ``` 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 Ok, so I got the solution. Actually, the `lpush` function expects all the list items be passed as arguments and NOT as a single list. The function signature from redis-py source makes it clear... ``` def lpush(self, name, *values): "Push ``values`` onto the head of the list ``name``" return self.execute_command('LPUSH', name, *values) ``` What I am doing above is send a single list as an argument, which is then sent to redis as a SINGLE item. I should be unpacking the list instead as suggested in the answer: ``` redis.lpush('foo', *[1,2,3,4,5,6,7,8,9]) ``` which returns the result I expect... ``` redis.lrange('foo', 0, -1) [b'9', b'8', b'7', b'6', b'5', b'4', b'3', b'2', b'1'] ```