Форум сайта python.su
Нужно нечто вроде рекурсивного zip.
Довольно сложно объяснить, поэтому приведу пример.
Допустим у нас есть словарь с вариантами в виде списков:
{'name':['One','Two'], 'id':[1,2]}
[{'name':'One','id:1},{'name':'One','id:2},{'name':'Two','id:1},{'name':'Two','id:2}]
Офлайн
from itertools import product my_dict = {'name':['One','Two'], 'id':[1,2]} variants = product(my_dict['name'], my_dict['id']) for variant in variants: print(variant)
Офлайн
from itertools import product d = {'name': ['One', 'Two', 'Three'], 'id': [1, 2, 3]} print [dict(name=x[0], id=x[1]) for x in product(*d.itervalues())]
Офлайн
Предполагается, что я не знаю ключей словаря.
То есть не могу использовать ни
my_dict['name'], my_dict['id']
name=x[0], id=x[1]
Офлайн
from itertools import product d = {'name': ['One', 'Two', 'Three'], 'id': [1, 2, 3]} keys = d.keys() print [dict(zip(keys, x)) for x in product(*d.itervalues())]
Офлайн
FishHook
Спасибо!
Я чуть было не сделал:
d = {'name': ['One', 'Two', 'Three'], 'id': [1, 2, 3]} keys = list(d.keys()) prod = product(*d.values()) res = [] for values in prod: sl = {} for i in range(len(keys)): sl[keys[i]] = values[i] res.append(sl)
Офлайн