python - 使用 Python 将字典与列表值组合

标签 python algorithm list dictionary combinations

我有以下传入值:

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'}]]

瞧 ;-)

关于python - 使用 Python 将字典与列表值组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3873654/

相关文章:

python - Django:有没有办法取消特定模型信号的接收器触发?

python - PyCharm 不会导入 PyGame

C:无法使用外部函数链接双链表中的头和尾[解决问题]

python - 如何使用转换器插件将 shapefile 转换为 jvectormap?

python - 如何在 html 中创建搜索部分并在 django 中使用多个查询创建搜索 View

algorithm - 逆向工程贝塞尔曲线

Java - 如何构建唯一的对象元组(n 维)?

php - PHP 中的深度优先迷宫生成,有人有任何示例吗?

c# - 使用 CompareTo 对具有两个参数的列表进行排序

list - Prolog 中的均匀大小的列表