fork download
  1. def unique_combinations(number_letter_dict):
  2. def _unique_combinations(index):
  3. if index == size:
  4. yield ()
  5. return
  6. number, letters = number_letters[index]
  7. for letter in letters:
  8. if letter not in used_letters:
  9. used_letters.add(letter)
  10. for combination in _unique_combinations(index + 1):
  11. yield [number, letter], *combination
  12. used_letters.remove(letter)
  13. number_letters = list(number_letter_dict.items())
  14. size = len(number_letters)
  15. used_letters = set()
  16. return list(_unique_combinations(0))
  17.  
  18. number_letter_dict = {1: ['a', 'b', 'c'], 2: ['c', 'd'], 3: ['b', 'c']}
  19. print(unique_combinations(number_letter_dict))
Success #stdin #stdout 0.03s 9668KB
stdin
Standard input is empty
stdout
[([1, 'a'], [2, 'c'], [3, 'b']), ([1, 'a'], [2, 'd'], [3, 'b']), ([1, 'a'], [2, 'd'], [3, 'c']), ([1, 'b'], [2, 'd'], [3, 'c']), ([1, 'c'], [2, 'd'], [3, 'b'])]