I am having the following difficulty: Given my input dictionary with 4 keys and their values e.g.
global_dict = {'Cloudy': (False, True),
'Rain': False,
'Sprinkler': (False, True),
'WetGrass': (False, True)}
I want to get all possible sub dictionaries with only one value for each key; preferably in a list e.g.
dict_list = [
{'WetGrass': False, 'Rain': False, 'Sprinkler': False, 'Cloudy': False},
{'WetGrass': False, 'Rain': False, 'Sprinkler': False, 'Cloudy': True},
{'WetGrass': False, 'Rain': False, 'Sprinkler': True, 'Cloudy': False},
{'WetGrass': False, 'Rain': False, 'Sprinkler': True, 'Cloudy': True},
{'WetGrass': True, 'Rain': False, 'Sprinkler': False, 'Cloudy': False},
{'WetGrass': True, 'Rain': False, 'Sprinkler': False, 'Cloudy': True},
{'WetGrass': True, 'Rain': False, 'Sprinkler': True, 'Cloudy': False},
{'WetGrass': True, 'Rain': False, 'Sprinkler': True, 'Cloudy': True}
]
I tried already the following:
src = {'lblA': (False, True), 'lblB': (False, True), 'lblC': (0, 1, 2)}
labels, terms = zip(*src.items())
print [dict(zip(labels, term)) for term in itertools.product(*terms)]
From here:
Best way to enumerate a cartesian product with labels in python?
But I keep getting the error:
TypeError 'bool' object is not iterable
I hope someone can help me out.
Thank you!