我有以下传入值:
variants = { "debug" : ["on", "off"], "locale" : ["de_DE", "en_US", "fr_FR"], ... }
我要处理它们,因此得到以下结果:
combinations = [ [{"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"}] ]
这应该适用于字典中任意长度的键。在Python中使用itertools玩过,但没有找到符合这些要求的内容。
import itertools as it varNames = sorted(variants) combinations = [dict(zip(varNames, prod)) for prod in it.product(*(variants[varName] for varName in varNames))]
嗯,这返回:
[{'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'}]
这可能不完全是您想要的。让我来适应它…
combinations = [ [ {varName: val} for varName, val in zip(varNames, prod) ] for prod in it.product(*(variants[varName] for varName in varNames))]
现在返回:
[[{'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à;-)