Combinations from dictionary with list values using Python

后端 未结 4 626
一向
一向 2020-12-08 00:52

I have the following incoming value:

variants = {
  \"debug\" : [\"on\", \"off\"],
  \"locale\" : [\"de_DE\", \"en_US\", \"fr_FR\"],
  ...
}
<
4条回答
  •  渐次进展
    2020-12-08 01:30

    import itertools as it
    
    varNames = sorted(variants)
    combinations = [dict(zip(varNames, prod)) for prod in it.product(*(variants[varName] for varName in varNames))]
    

    Hm, this returns:

    [{'debug': 'on', 'locale': 'de_DE'},
     {'debug': 'on', 'locale': 'en_US'},
     {'debug': 'on', 'locale': 'fr_FR'},
     {'debug': 'off', 'locale': 'de_DE'},
     {'debug': 'off', 'locale': 'en_US'},
     {'debug': 'off', 'locale': 'fr_FR'}]
    

    which is probably not exactly, what you want. Let me adapt it...

    combinations = [ [ {varName: val} for varName, val in zip(varNames, prod) ] for prod in it.product(*(variants[varName] for varName in varNames))]
    

    returns now:

    [[{'debug': 'on'}, {'locale': 'de_DE'}],
     [{'debug': 'on'}, {'locale': 'en_US'}],
     [{'debug': 'on'}, {'locale': 'fr_FR'}],
     [{'debug': 'off'}, {'locale': 'de_DE'}],
     [{'debug': 'off'}, {'locale': 'en_US'}],
     [{'debug': 'off'}, {'locale': 'fr_FR'}]]
    

    Voilà ;-)

提交回复
热议问题