Redis: Comment analyser un résultat de liste

Je suis le stockage d'une liste dans le Redis comme ceci:

redis.lpush('foo', [1,2,3,4,5,6,7,8,9])

Puis-je obtenir la liste comme ceci:

redis.lrange('foo', 0, -1)

et j'obtiens quelque chose comme ceci:

[b'[1, 2, 3, 4, 5, 6, 7, 8, 9]']

Comment puis-je convertir cette réelle liste Python?

Aussi, je ne vois rien de défini dans RESPONSE_CALLBACKS qui peut vous aider? Ai-je raté quelque chose?

Une solution possible (ce qui, à mon avis, suce) peut être:

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]

Mise à JOUR

Ok, alors je suis la solution.

En fait, la lpush fonction attend tous les éléments de la liste être passés comme arguments et non PAS comme une liste unique. La signature de la fonction de redis-py source précise...

def lpush(self, name, *values):
    "Push ``values`` onto the head of the list ``name``"
    return self.execute_command('LPUSH', name, *values)

Ce que je fais ci-dessus est d'envoyer une liste unique comme un argument, qui est ensuite envoyé à redis comme un SEUL élément.

Je devrais être le déballage de la liste au lieu de cela, comme suggéré dans la réponse:

redis.lpush('foo', *[1,2,3,4,5,6,7,8,9])

qui renvoie le résultat que j'attends...

redis.lrange('foo', 0, -1)
[b'9', b'8', b'7', b'6', b'5', b'4', b'3', b'2', b'1']

source d'informationauteur treecoder