values = ["A", "A", "B", "C", "A", "C", "C"] keys = [ 1, 2, 3, 3, 4, 4, 5, 5 ] data = dict() for char, number in zip(values, keys): if number not in data: data[number] = [] data[number].append(char) data = data.values() print(data) import itertools result = [''.join(x) for x in itertools.product(*data)] print(result) #result = ["AABAC", "AABCC", "AACAC", "AACCC"]