通过在Python中乘以其他字典来创建字典

时间:2018-02-23 22:14:45

标签: python dictionary

我有一个带变量的词典:

bind -m vi-insert '"jk": vi-movement-mode'

对于每个可能的变量组合,我想做一个单独的场景,如下:

bindkey -M viins 'jk' vi-cmd-mode

怎么做?

3 个答案:

答案 0 :(得分:2)

您可以将嵌套词典与zipenumerateitertools.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)

您可以使用itertoolsstring作为简短解决方案:

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}}
相关问题