I encountered this problem some time ago making test cases. I have a package on pip now called 'looper' which extends itertools with some dictionary magic and other things I've found useful.
https://pypi.python.org/pypi/looper
What you want doesn't seem to be a full cartesian product of the two dictionarys, which would be 36 items long, combining each key d1[k1] * d1[k2] * d2[k1] * d2[k2].
Instead you seem to want d1[k1,k2] * d2[k1,k2], iterating through n evenly for each key. This is known as a zip function, and dict_zip does this for dictionaries.
from pprint import pprint
from looper import iterutil
dict_1 = {'status': ['online', 'Away', 'Offline'],
'Absent': ['yes', 'no', 'half day']}
dict_2 = {'healthy': ['yes', 'no'],
'insane': ['yes', 'no']}
# the first thing to do is to zip the dictionaries up. This produces a dictionary for each value of n in d[k][n]
zipped_dict_1 = iterutil.dict_zip(**dict_1)
# {'Absent': 'yes', 'status': 'online'}
# {'Absent': 'no', 'status': 'Away'}
# {'Absent': 'half day', 'status': 'Offline'}
zipped_dict_2 = iterutil.dict_zip(**dict_2)
# {'healthy': 'yes', 'insane': 'yes'}
# {'healthy': 'no', 'insane': 'no'}
# Now the output is a list of flattened dictionaries, take the Cartesian product of them.
product_dict = iterutil.product(zipped_dict_1,zipped_dict_2)
# ({'Absent': 'yes', 'status': 'online'}, {'healthy': 'yes', 'insane': 'yes'})
# ({'Absent': 'yes', 'status': 'online'}, {'healthy': 'no', 'insane': 'no'})
# ({'Absent': 'no', 'status': 'Away'}, {'healthy': 'yes', 'insane': 'yes'})
# ({'Absent': 'no', 'status': 'Away'}, {'healthy': 'no', 'insane': 'no'})
# ({'Absent': 'half day', 'status': 'Offline'}, {'healthy': 'yes', 'insane': 'yes'})
# ({'Absent': 'half day', 'status': 'Offline'}, {'healthy': 'no', 'insane': 'no'})
# The product function produces tuples which must be combined in to a final dictionary.
# Merge the dictionaries using imap
merged_dict = iterutil.imap(lambda x: dict(x[0].items()+x[1].items()),product_dict)
for d in merged_dict:
pprint(d)
OUTPUT
{'Absent': 'yes', 'healthy': 'yes', 'insane': 'yes', 'status': 'online'}
{'Absent': 'yes', 'healthy': 'no', 'insane': 'no', 'status': 'online'}
{'Absent': 'no', 'healthy': 'yes', 'insane': 'yes', 'status': 'Away'}
{'Absent': 'no', 'healthy': 'no', 'insane': 'no', 'status': 'Away'}
{'Absent': 'half day', 'healthy': 'yes', 'insane': 'yes', 'status': 'Offline'}
{'Absent': 'half day', 'healthy': 'no', 'insane': 'no', 'status': 'Offline'}