@artem78

Как сделать itertools.combinations для словаря?

Дан список опций с возможными вариантами:
{'param_abdomen': ['thin', 'normal', 'large'],
 'param_chest': ['strong', 'normal', 'corpulent'],
 'param_shoulders': ['straight', 'normal', 'fallen'],
 'param_stance': ['straight', 'normal', 'curved']}


Нужно получить все возможные комбинации значений опций:
{'param_abdomen': 'thin',
 'param_chest': 'strong',
 'param_shoulders': 'straight',
 'param_stance': 'straight'
}
 
{'param_abdomen': 'normal',
 'param_chest': 'strong',
 'param_shoulders': 'straight',
 'param_stance': 'straight'
}
 
{'param_abdomen': 'large',
 'param_chest': 'strong',
 'param_shoulders': 'straight',
 'param_stance': 'straight'
}
 
 ...
 
{'param_abdomen': 'large',
 'param_chest': 'corpulent',
 'param_shoulders': 'fallen',
 'param_stance': 'curved'
}


Получившийся код должен работать с произвольным кол-вом опций/вариантов.
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
from itertools import product
d = {
    'param_abdomen': ['thin', 'normal', 'large'],
    'param_chest': ['strong', 'normal', 'corpulent'],
    'param_shoulders': ['straight', 'normal', 'fallen'],
    'param_stance': ['straight', 'normal', 'curved']
}
keys = sorted(d)
variants = [dict(zip(keys, p)) for p in product(*(d[k] for k in keys))]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
24 нояб. 2024, в 21:55
200000 руб./за проект
24 нояб. 2024, в 21:41
1000 руб./за проект
24 нояб. 2024, в 21:19
35000 руб./за проект