Я храню список в 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
ожидает, что все элементы списка будут переданы как аргументы, а NOT - как один список. Подпись функции от источника redis-py дает понять...
def lpush(self, name, *values):
"Push ``values`` onto the head of the list ``name``"
return self.execute_command('LPUSH', name, *values)
То, что я делаю выше, отправляет единственный список в качестве аргумента, который затем отправляется redis как элемент SINGLE.
Я должен распаковать список вместо этого, как это было предложено в ответе:
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']