繁体   English   中英

从 dict + list 产生所有可能的排列

[英]Producing all possible permutations from a dict + list

我需要生成一个字典列表,显示两个值的所有可能排列。 (我正在测试 UI 组件,所以我需要查看它们在所有可能的情况下如何呈现,但不太可能。)我可以通过列表理解来做到这一点:

values = [True, False]
variants = ({
    'Field X': x,
    'Field Y': y,
    'Field Z': z,
} for x in values for y in values for z in values)

生产:

>>> list(variants)
[{'Field X': True, 'Field Y': True, 'Field Z': True}, {'Field X': True, 'Field Y': True, 'Field Z': False}, {'Field X': True, 'Field Y': False, 'Field Z': True}, {'Field X': True, 'Field Y': False, 'Field Z': False}, {'Field X': False, 'Field Y': True, 'Field Z': True}, {'Field X': False, 'Field Y': True, 'Field Z': False}, {'Field X': False, 'Field Y': False, 'Field Z': True}, {'Field X': False, 'Field Y': False, 'Field Z': False}]

当我有(如这里)三个字段和两个值时,这是可以的,但是当我有几十个具有多个值的字段时它会变得毛茸茸! 我认为必须有一种简单的方法可以使用itertools执行此操作,但不知道那是什么。 也许有itertools.product()的东西?

使用itertools.product(values, repeat=3)获取 3 个值的每个组合。

variants = [{
    'Field X': x,
    'Field Y': y,
    'Field Z': z,
} for x in values for y in values for z in itertools.product(values, repeat=3)]

如果您有动态的字段列表,则可以使用dict(zip(...))动态创建字典

values=[True, False]
fields=['Field X', 'Field Y', 'Field Z']
variants = [
    dict(zip(fields, values))
    for values in itertools.product(values, repeat=len(fields))
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM