Вы можете сделать это, используя itertools product и некоторые манипуляции с выводом, чтобы получить нужные дикты
from itertools import product
c = {
'usize': { '500': False, '100': True},
'isize': { '200': False, '800':False, '900':True},
'path': {'/tmp': False, '/var':True, '/tp12':False}
}
result = []
for group in product(*c.values()): #this makes all product groups of values such as (500, 200, '/var') etc.
temp = dict(zip(c.keys(), group)) #bring back the keys for every group
#create a new 'value' key with the boolean result
temp['value'] = all(c[k][v] for k, v in temp.items()) #change to .iteritems() for python 2
result.append(temp)
print(result)
Выход:
[{'usize': '500', 'isize': '200', 'path': '/tmp', 'value': False},
{'usize': '500', 'isize': '200', 'path': '/var', 'value': False},
{'usize': '500', 'isize': '200', 'path': '/tp12', 'value': False},
{'usize': '500', 'isize': '800', 'path': '/tmp', 'value': False},
{'usize': '500', 'isize': '800', 'path': '/var', 'value': False},
{'usize': '500', 'isize': '800', 'path': '/tp12', 'value': False},
{'usize': '500', 'isize': '900', 'path': '/tmp', 'value': False},
{'usize': '500', 'isize': '900', 'path': '/var', 'value': False},
{'usize': '500', 'isize': '900', 'path': '/tp12', 'value': False},
{'usize': '100', 'isize': '200', 'path': '/tmp', 'value': False},
{'usize': '100', 'isize': '200', 'path': '/var', 'value': False},
{'usize': '100', 'isize': '200', 'path': '/tp12', 'value': False},
{'usize': '100', 'isize': '800', 'path': '/tmp', 'value': False},
{'usize': '100', 'isize': '800', 'path': '/var', 'value': False},
{'usize': '100', 'isize': '800', 'path': '/tp12', 'value': False},
{'usize': '100', 'isize': '900', 'path': '/tmp', 'value': False},
{'usize': '100', 'isize': '900', 'path': '/var', 'value': True},
{'usize': '100', 'isize': '900', 'path': '/tp12', 'value': False}]