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)
等等...
我不知道如何继续解决这个问题?
注意:这些值只是为了简化任务,原始任务每个都有更多的键和值,但是如果我可以为这些简单的示例做到这一点,我就可以为我的原始任务做到这一点。
享受:
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)
| 归档时间: |
|
| 查看次数: |
936 次 |
| 最近记录: |