Creating cartesian product for n different types

前端 未结 2 2063
孤城傲影
孤城傲影 2020-12-21 01:14

Consider I have a dict holding n different types represented by keys:x1, x2 ..xn

For simplicity let\'s take a small example:

{\"x1\":[\"         


        
2条回答
  •  旧时难觅i
    2020-12-21 01:57

    You can use product from itertools module within a comprehension:

    from itertools import product
    
    a = {"x1":["foo1", "goo1" ,"doo1"], "x2":["foo2","goo2"]}
    final = [{i:j for i, j in zip(a.keys(), k)} for k in product(*a.values())]
    # Or:
    # final = [dict(zip(a.keys(), k)) for k in product(*a.values())]
    # Or:
    # final = list(map(lambda x: dict(zip(a.keys(), x)), product(*a.values())))
    
    print(final)
    

    Output:

    [{'x1': 'foo1', 'x2': 'foo2'},
     {'x1': 'foo1', 'x2': 'goo2'},
     {'x1': 'goo1', 'x2': 'foo2'},
     {'x1': 'goo1', 'x2': 'goo2'},
     {'x1': 'doo1', 'x2': 'foo2'},
     {'x1': 'doo1', 'x2': 'goo2'}]
    

提交回复
热议问题