Найти - Пользователи
Полная версия: Как скомбинировать варианты, предложенные в словарях?
Начало » Python для экспертов » Как скомбинировать варианты, предложенные в словарях?
1
nokados
Нужно нечто вроде рекурсивного 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}]
Как это можно сделать?
Alen
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)
FishHook
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())]
nokados
Предполагается, что я не знаю ключей словаря.
То есть не могу использовать ни
my_dict['name'], my_dict['id']
ни
name=x[0], id=x[1]
FishHook

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())]
nokados
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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB