2017-02-16 22 views
0

У меня есть два списка: keys = [k0, k1, .... kn] vals = [v0, v1, .... vn]Python, redis: Как установить несколько пар ключ-значение сразу

Я могу установить эти значения ключа в redis в несколько этапов, выполнив следующие действия: for i in range(0,len(keys)): redis_con.set(keys[i], vals[i]) Но это операции с несколькими наборами. Как это сделать на одном шаге async?

+0

Я думаю, что вы хотите это: '{ключ: значение для ключа, значение в zip (ke ys, vals)}. – Elmex80s

+0

Вопрос не в том, чтобы получить новый dataframe. Речь идет о настройке нескольких ключей и значений за один шаг, вместо того, чтобы делать цикл for для установки одной пары ключ-значение за один раз. –

+0

Если вы просите сделать это одним вызовом redis, используйте трубопровод redis – Sooraj

ответ

1

Предполагая, что вы хотите одиночная Redis требует набора опс:

pipe = redis_con.pipeline() 
for i in range(0,len(keys)): 
    pipe.set(keys[i], vals[i]) 
pipe.execute() 
1
keys= ["k0","k1"] 
vals= ["v0","v1"] 
# use zip or izip based on py 
res = set(zip(keys, vals)) 
print res 
>>> set([('k0', 'v0'), ('k1', 'v1')]) 
+0

Разве это не устарело с версии 2.6? [link] (https://docs.python.org/2/library/sets.html) – Elmex80s

+0

thx, true, отредактировано –

1

Вы можете, также, сделать это с помощью пользовательского метода, как таким образом:

a = [["b", "k", "a"], ["c", "m", "a"], ["a", "j","c"]] 
b = [["k","a", "l"], ["l", "f", "c"], ["c", "d", "b"]] 

def get_sets(*args): 
    final = [] 
    for v in args: 
     for j in v: 
      final.append(set(j)) 
     yield final 
     final = [] 

print(list(get_sets(a,b))) 

Выход:

[ 
    [ 
    {'b', 'k', 'a'}, {'c', 'a', 'm'}, {'c', 'j', 'a'} 
    ], 
    [ 
    {'l', 'k', 'a'}, {'c', 'f', 'l'}, {'c', 'd', 'b'} 
    ] 
]