def dict_cartesian_product(dico):
    """ iterer sur les dictionnaires """
    result = [[]]

    for eltList in dico.values():
	result = [ set+[elt] for set in result for elt in eltList]

    for set in result:
	d = {}
	for k,v in zip(dico.keys(),set):
	    d[k] = v
	yield d

def get_nb(dico):
    """ obtenir le nombre de dictionnaire qui vont etre genere """
    nb = 1
    for v in dico.values():
	nb *= len(v)
    return nb

if __name__ == '__main__':

	dtest = {'un':['1a','1b','1c'], 'deux':['2222',], 'trois':['3333',], 'quatre':['4444',], 'cinq':['5a','5b']} 

	nb = get_nb(dtest)
	print 'On va iterer sur %i dictionnaires.\n' % nb

	if nb<100:
	    for d in dict_cartesian_product(dtest):
		print d

