Python Python: Generating All Possible Combinations?

AI Thread Summary
The discussion centers on generating all possible combinations of values from a dictionary where each key can have multiple associated values. A sample dictionary is provided, illustrating how keys map to lists of values. The goal is to create a 2D list containing every possible combination of these values, with the example indicating a total of 360 combinations based on the provided values.Participants suggest using Python's itertools module, specifically the combinations function, to achieve this task efficiently. Additionally, the technique of backtracking is recommended for those who prefer a more manual approach. A code snippet is shared that demonstrates a method for generating combinations using a while loop and index tracking, which iterates through the dictionary keys and their respective values to build the desired output. Overall, the discussion emphasizes the utility of built-in Python functions and algorithms for solving the problem of generating combinations from a dictionary.
tangodirt
Messages
51
Reaction score
1
Need a little help here, if anyone can offer any advice. The problem I have is this. I have a dictionary that contains keys, and their possible values. I need to generate every possible combination of key values where each key can take on one of the possible values.

For example, the dictionary might look something like:
Code:
Value Dictionary: {1: [[A], [B], [C]], 2: [[D], [E], [F], [G], [H]], 3: [[I], [J]], 4: [[K], [L], [M], [N]], 5: [[O], [P], [Q]]}

So, for the "1" key, the possible values it can assume are A, B, and C. For the "2" key, the possible values it can assume are D, E, F, G, and H. This continues for all keys, of undefined number of possible values. For this example, the number of possible combinations is something of the form: 3*5*2*4*3 = 360.

I need a way to output a 2D list containing every possible combination. So, the algorithm would output something like:

Code:
Combination List: [[A,D,I,K,O], [A,D,I,K,P], [A,D,I,K,Q], [A,D,I,L,O],...,[C,H,J,N,Q]]

Where the length of the combination list would be 360 and the width would be 5.

Does python have any built in way to do this, or will I have to come up with some logic to do this by hand? If I have to do it by hand, does anyone have any recommendations? I'm guessing recursion might be the best way to do this, but I'm not sure.
 
Last edited:
Technology news on Phys.org
Yes, it can be done with recursion, more particularly, using the technique of backtracking. I suggest you to learn it, it's a simple, yet powerful technique.

http://en.wikipedia.org/wiki/Backtracking
 
here was my valiant effort at it.
Code:
def patterns(dictionary):
   key = sorted(dictionary.keys())
   index = [0]*len(key)
   elements = {}
   next = 0
   while True:
      i = 0
      for value in key:
         if i == 0:
            elements[next] = dictionary[value][index[i]]
         else:
            elements[next] =elements[next][:] +dictionary[value][index[i]] 
         i += 1
      i = 0
      index[i] += 1
      while index[i] >= len(dictionary[key[i]]):
         index[i] = 0
         i += 1
         if i >= len(index):
            break
         else:
            index[i] += 1
      if i >= len(index):
         break
      next += 1
   return elements
val = {1: [["A"], ["B"], ["C"]], 2: [["D"], ["E"], ["F"], ["G"], ["H"]], 3: [["I"], ["J"]], 4: [["K"], ["L"], ["M"], ["N"]], 5: [["O"], ["P"], ["Q"]]}
print patterns(val)
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I had a Microsoft Technical interview this past Friday, the question I was asked was this : How do you find the middle value for a dataset that is too big to fit in RAM? I was not able to figure this out during the interview, but I have been look in this all weekend and I read something online that said it can be done at O(N) using something called the counting sort histogram algorithm ( I did not learn that in my advanced data structures and algorithms class). I have watched some youtube...

Similar threads

Back
Top