如何在字典中创建可能组合的列表?

Ani*_*mes 3 python combinations dictionary

我有一个 python 字典如下:

test = {"a": value_of_a,"b": value_of_b, "c": value_of_c}
Run Code Online (Sandbox Code Playgroud)

value_of_a, value_of_b, value_of_c所有可以取 3 个值的变量在哪里:

  • 1,2 或 3 为value_of_a

  • “a”、“b”或“c”代表value_of_b

  • 45,180,250 为vaulue_of_c

我想创建一个字典列表,其中每个字典都包含这些值的一个组合。例如字典可能如下:

test1 = {"a" : 2, "b" : "a", "c" : 45 }
test2 = {"a" : 3, "b" : "a", "c" : 45 }
Run Code Online (Sandbox Code Playgroud)

等等...

我不知道如何继续解决这个问题?

注意:这些值只是为了简化任务,原始任务每个都有更多的键和值,但是如果我可以为这些简单的示例做到这一点,我就可以为我的原始任务做到这一点。

Fom*_*aut 5

享受:

import itertools


def iterate_values(S):
    keys, values = zip(*S.items())

    for row in itertools.product(*values):
        yield dict(zip(keys, row))


S = {"a": [1, 2, 3], "b": ["a", "b", "c"], "c": [45, 180, 250]}

for d in iterate_values(S):
    print(d)
Run Code Online (Sandbox Code Playgroud)

结果:

{'a': 1, 'c': 45, 'b': 'a'}
{'a': 1, 'c': 45, 'b': 'b'}
{'a': 1, 'c': 45, 'b': 'c'}
{'a': 1, 'c': 180, 'b': 'a'}
{'a': 1, 'c': 180, 'b': 'b'}
{'a': 1, 'c': 180, 'b': 'c'}
{'a': 1, 'c': 250, 'b': 'a'}
{'a': 1, 'c': 250, 'b': 'b'}
{'a': 1, 'c': 250, 'b': 'c'}
{'a': 2, 'c': 45, 'b': 'a'}
{'a': 2, 'c': 45, 'b': 'b'}
{'a': 2, 'c': 45, 'b': 'c'}
{'a': 2, 'c': 180, 'b': 'a'}
{'a': 2, 'c': 180, 'b': 'b'}
{'a': 2, 'c': 180, 'b': 'c'}
{'a': 2, 'c': 250, 'b': 'a'}
{'a': 2, 'c': 250, 'b': 'b'}
{'a': 2, 'c': 250, 'b': 'c'}
{'a': 3, 'c': 45, 'b': 'a'}
{'a': 3, 'c': 45, 'b': 'b'}
{'a': 3, 'c': 45, 'b': 'c'}
{'a': 3, 'c': 180, 'b': 'a'}
{'a': 3, 'c': 180, 'b': 'b'}
{'a': 3, 'c': 180, 'b': 'c'}
{'a': 3, 'c': 250, 'b': 'a'}
{'a': 3, 'c': 250, 'b': 'b'}
{'a': 3, 'c': 250, 'b': 'c'}
Run Code Online (Sandbox Code Playgroud)

我将它实现为生成器,因为它可以节省您的内存。如果您需要准确的列表,您可以这样做:

lst = list(iterate_values(S))
Run Code Online (Sandbox Code Playgroud)