我有一个带变量的词典:
bind -m vi-insert '"jk": vi-movement-mode'
对于每个可能的变量组合,我想做一个单独的场景,如下:
bindkey -M viins 'jk' vi-cmd-mode
怎么做?
答案 0 :(得分:2)
您可以将嵌套词典与zip
,enumerate
和itertools.product
结合使用。
>>> {i: {n: v for n, v in zip(names, p)}
... for names, values in [zip(*variables.items())]
... for i, p in enumerate(itertools.product(*values), start=1)}
...
{1: {'a': 'x', 'b': 1, 'c': 'xx'},
2: {'a': 'x', 'b': 2, 'c': 'xx'},
3: {'a': 'x', 'b': 3, 'c': 'xx'},
...
36: {'a': 'z', 'b': 4, 'c': 'zz'}}
但是,这会以不同的顺序生成项目。如果您需要确切的订单,可以在计算产品之前对商品进行反向排序:
>>> {i: {n: v for n, v in zip(names, p)}
... for names, values in [zip(*sorted(variables.items(), reverse=True))]
... for i, p in enumerate(itertools.product(*values), start=1)}
...
{1: {'a': 'x', 'b': 1, 'c': 'xx'},
2: {'a': 'y', 'b': 1, 'c': 'xx'},
3: {'a': 'z', 'b': 1, 'c': 'xx'},
...
两者都适用于任何个variables
。
答案 1 :(得分:0)
您可以使用嵌套的for循环轻松遍历所有组合。
variables = {
'a': ['x','y','z'],
'b': [1,2,3,4],
'c': ['xx','yy','zz']
}
# New dict
scenarios = {}
i = 0
# iterates through all values of each dict item
for a_value in variables['a']:
for b_value in variables['b']:
for c_value in variables['c']:
scenarios[i] = {'a': a_value, 'b': b_value, 'c' : c_value}
i += 1
要检查这是否会产生结果,您可以运行以下命令:
for key in sinarios:
print(key, sinarios[key])
答案 2 :(得分:0)
您可以使用itertools
和string
作为简短解决方案:
import itertools
from string import ascii_lowercase as l
variables = {
'a': ['x','y','z'],
'b': [1,2,3,4],
'c': ['xx','yy','zz']
}
new_vars = {i:dict(zip(l[:3], a)) for i, a in enumerate(itertools.product(*[variables[i] for i in l[:3]]), start=1)}
输出:
{1: {'a': 'x', 'c': 'xx', 'b': 1}, 2: {'a': 'x', 'c': 'yy', 'b': 1}, 3: {'a': 'x', 'c': 'zz', 'b': 1}, 4: {'a': 'x', 'c': 'xx', 'b': 2}, 5: {'a': 'x', 'c': 'yy', 'b': 2}, 6: {'a': 'x', 'c': 'zz', 'b': 2}, 7: {'a': 'x', 'c': 'xx', 'b': 3}, 8: {'a': 'x', 'c': 'yy', 'b': 3}, 9: {'a': 'x', 'c': 'zz', 'b': 3}, 10: {'a': 'x', 'c': 'xx', 'b': 4}, 11: {'a': 'x', 'c': 'yy', 'b': 4}, 12: {'a': 'x', 'c': 'zz', 'b': 4}, 13: {'a': 'y', 'c': 'xx', 'b': 1}, 14: {'a': 'y', 'c': 'yy', 'b': 1}, 15: {'a': 'y', 'c': 'zz', 'b': 1}, 16: {'a': 'y', 'c': 'xx', 'b': 2}, 17: {'a': 'y', 'c': 'yy', 'b': 2}, 18: {'a': 'y', 'c': 'zz', 'b': 2}, 19: {'a': 'y', 'c': 'xx', 'b': 3}, 20: {'a': 'y', 'c': 'yy', 'b': 3}, 21: {'a': 'y', 'c': 'zz', 'b': 3}, 22: {'a': 'y', 'c': 'xx', 'b': 4}, 23: {'a': 'y', 'c': 'yy', 'b': 4}, 24: {'a': 'y', 'c': 'zz', 'b': 4}, 25: {'a': 'z', 'c': 'xx', 'b': 1}, 26: {'a': 'z', 'c': 'yy', 'b': 1}, 27: {'a': 'z', 'c': 'zz', 'b': 1}, 28: {'a': 'z', 'c': 'xx', 'b': 2}, 29: {'a': 'z', 'c': 'yy', 'b': 2}, 30: {'a': 'z', 'c': 'zz', 'b': 2}, 31: {'a': 'z', 'c': 'xx', 'b': 3}, 32: {'a': 'z', 'c': 'yy', 'b': 3}, 33: {'a': 'z', 'c': 'zz', 'b': 3}, 34: {'a': 'z', 'c': 'xx', 'b': 4}, 35: {'a': 'z', 'c': 'yy', 'b': 4}, 36: {'a': 'z', 'c': 'zz', 'b': 4}}