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
Vous devez vous connecter pour publier un commentaire.
Je pense que vous êtes cogner la sémantique, qui sont similaires à la distinction entre liste.append() et liste.extend(). Je sais que cela fonctionne pour moi:
... à noter l' * (carte) opérateur préfixant la liste!
D'une autre manière: vous pouvez utiliser
RedisWorks
bibliothèque.pip install redisworks
Il convertit python les types de Redis types et vice-versa. Donc, même si vous aviez liste imbriquée, il aurait travaillé:
Avertissement: j'ai écrit de la bibliothèque. Voici le code: https://github.com/seperman/redisworks
En fait, cette question des doublons ceci:
Comment pousser une séquence entière à redis en Python. Le problème et sa solution est absolument de même pour obtenir la liste des données correctement, nous devrions pousser dans une bonne voie d'abord.