Создать матрицу оптимизации в python из разных чисел и разных размеров списка, которые включены в словарь - PullRequest
0 голосов
/ 03 апреля 2020

Я ищу метод для создания списка конфигурации из словаря. Например:

   Estimators = {'Model1':{'val1':(1,2), 'val2':(a,b)},
                 'Model2':{'val1':(1,2), 'val2':(a,b), 'val3'=(x,y)}}

Результат должен быть одним списком, содержать все возможные комбинации в «Моделях»:

(1,a)
(1,b)
(2,a)
(2,b)
(1,a,x)
(1,a,y)
...

Мне нужен гибкий метод, в котором «Оценщики» могут содержат разные размеры «Моделей», а «Модели» могут содержать разные номера и размеры списка.

Спасибо!

1 Ответ

0 голосов
/ 03 апреля 2020

вы можете использовать itertools.combinations и itertools.product:

from itertools import product, combinations
from itertools import chain

models = set(chain.from_iterable((v.values() for v in Estimators.values())))    
result = []
for i in range(2, len(models) + 1):
    for n in combinations(models, i):
        result.extend(list(product(*n)))

result

выход:

[(1, 'x'),
 (1, 'y'),
 (2, 'x'),
 (2, 'y'),
 (1, 'a'),
 (1, 'b'),
 (2, 'a'),
 (2, 'b'),
 ('x', 'a'),
 ('x', 'b'),
 ('y', 'a'),
 ('y', 'b'),
 (1, 'x', 'a'),
 (1, 'x', 'b'),
 (1, 'y', 'a'),
 (1, 'y', 'b'),
 (2, 'x', 'a'),
 (2, 'x', 'b'),
 (2, 'y', 'a'),
 (2, 'y', 'b')]
...