Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 21, 2014 19:16:43

nokados
От: Ростов
Зарегистрирован: 2013-10-15
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Как скомбинировать варианты, предложенные в словарях?

Нужно нечто вроде рекурсивного zip.
Довольно сложно объяснить, поэтому приведу пример.
Допустим у нас есть словарь с вариантами в виде списков:

{'name':['One','Two'], 'id':[1,2]}
Ключей(name,id, …) может быть сколько угодно.
Нужно создать список из всех сочетаний списков словаря, то есть вернуть нечто вроде:
[{'name':'One','id:1},{'name':'One','id:2},{'name':'Two','id:1},{'name':'Two','id:2}]
Как это можно сделать?



моя подпись

Офлайн

#2 Сен. 21, 2014 19:27:16

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Как скомбинировать варианты, предложенные в словарях?

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)

Офлайн

#3 Сен. 21, 2014 19:27:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как скомбинировать варианты, предложенные в словарях?

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())]



Офлайн

#4 Сен. 21, 2014 19:44:28

nokados
От: Ростов
Зарегистрирован: 2013-10-15
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Как скомбинировать варианты, предложенные в словарях?

Предполагается, что я не знаю ключей словаря.
То есть не могу использовать ни

my_dict['name'], my_dict['id']
ни
name=x[0], id=x[1]



моя подпись

Офлайн

#5 Сен. 21, 2014 20:00:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как скомбинировать варианты, предложенные в словарях?


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())]



Офлайн

#6 Сен. 21, 2014 20:11:40

nokados
От: Ростов
Зарегистрирован: 2013-10-15
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Как скомбинировать варианты, предложенные в словарях?

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)



моя подпись

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version