Динамически генерируйте циклы for для создания списков из словаря

variations = {
    'size':{'small':'Small',
            'medium':'Medium', 
            'large':'Large'}, 
    'quantity':{'20l':'20l',
                '10l':'10l',
                '5l':'5l'},
    'color':{'red':'Red',
             'blue':'Blue',
             'green':'Green'}
                }

var_list = [[i,j,k] for i in variations['color'] for j in variations['size'] for k in variations['quantity']]

Вы также можете записать приведенный выше код в виде:

var_list = []

for i in variations['color']:
  for j in variations['size']:
    for k in variations['quantity']:
      comb = []
      comb.append(i)
      comb.append(j)
      comb.append(k)
      Var_list.append(comb)

В обоих случаях var_list выведет:

[['red', 'small', '20l'], ['red', 'small', '10l'], ['red', 'small', '5l'], ['red', 'medium', '20l'], ['red', 'medium', '10l'], ['red', 'medium', '5l'], ['red', 'large', '20l'], ['red', 'large', '10l'], ['red', 'large', '5l'], ['blue', 'small', '20l'], ['blue', 'small', '10l'], ['blue', 'small', '5l'], ['blue', 'medium', '20l'], ['blue', 'medium', '10l'], ['blue', 'medium', '5l'], ['blue', 'large', '20l'], ['blue', 'large', '10l'], ['blue', 'large', '5l'], ['green', 'small', '20l'], ['green', 'small', '10l'], ['green', 'small', '5l'], ['green', 'medium', '20l'], ['green', 'medium', '10l'], ['green', 'medium', '5l'], ['green', 'large', '20l'], ['green', 'large', '10l'], ['green', 'large', '5l']]

var_list содержит 3 цикла for, основанных на 3 словарях в вариациях. Как написать приведенный выше код, чтобы циклы for в var_list можно было увеличивать или уменьшать в зависимости от количества словарей, присутствующих в вариациях?

Например, если 'brand' также присутствует в вариациях, цикл for для этого 'brand' должен быть динамически создан в var_list, так что var_list становится

var_list = [[i,j,k,l] for i in variations['color'] for j in variations['size'] for k in variations['quantity'] for l in varistions['brands']
 
Вернуться на верх