我不知道我给出的标题是否能很好地解释我需要我的程序做什么。我将使用以下形式的词典:
main_dictionary = {1: [ [a], [b], [c], ... ], 2: [ [a], [b], [c], ... ] , ... }
字典可以任意长,并且每个键具有任意数量的选项。我需要程序然后对这本词典的每个排列进行测试。
sub_dictionary = {1: [a], 2: [a], ... }
test_program(sub_dictionary)
sub_dictionary = {1: [a], 2: [b], ... }
test_program(sub_dictionary)
答案 0 :(得分:1)
以下是使用itertools.product
的一种方法。结果是一个"子词典列表"。
为简单起见,我使用了一个整数列表作为值,但这可以用您选择的值替换。
from itertools import product
d = {1: [3, 4, 5], 2: [6, 7, 8]}
values = list(zip(*sorted(d.items())))[1]
res = [dict(enumerate(x, 1)) for x in product(*values)]
如果您需要单独测试每个字典,请使用生成器表达式并迭代它:
for item in (dict(enumerate(x, 1)) for x in product(*values)):
...
如果你有字符串键:
res = [dict(zip(sorted(d), x)) for x in product(*values)]
结果:
[{1: 3, 2: 6},
{1: 3, 2: 7},
{1: 3, 2: 8},
{1: 4, 2: 6},
{1: 4, 2: 7},
{1: 4, 2: 8},
{1: 5, 2: 6},
{1: 5, 2: 7},
{1: 5, 2: 8}]