首页 > 解决方案 > 在python中的字典中组合列表的所有排列

问题描述

给定初始字典

c = {'c': {'a':[1, 2, 3], 'b': [2, 3, 4]}}

我想生成一个具有所有可能排列的字典,而不显式调用索引

预期输出:

c = {'c0': {'a': 1, 'b': 2},
     'c1': {'a': 1, 'b': 3},
     'c2': {'a': 1, 'b': 4},
     'c3': {'a': 2, 'b': 2},
     'c4': {'a': 2, 'b': 3},
     'c5': {'a': 2, 'b': 4},
     'c6': {'a': 3, 'b': 2},
     'c7': {'a': 3, 'b': 3},
     'c8': {'a': 3, 'b': 4}}

我试过的(它不漂亮,但我现在想不通):

p = {}

for i, j in c.items():

  for k in j.keys():
    xxx = 0
    for v in j[k]:
      if i + str(xxx) in p.keys():
        p[i + str(xxx)][k] = v
      else:
        p[i + str(xxx)] = {}
        p[i + str(xxx)][k] = v
      xxx +=1

标签: pythonpython-3.xlistdictionary

解决方案


您可以使用itertools.product

from itertools import product as pt
c = {'c': {'a':[1, 2, 3], 'b': [2, 3, 4]}}
new_c = {f'{a}{i}':dict(zip(b.keys(), k)) for a, b in c.items() for i, k in enumerate(pt(*b.values()))}

输出:

 {'c0': {'a': 1, 'b': 2}, 
  'c1': {'a': 1, 'b': 3}, 
  'c2': {'a': 1, 'b': 4}, 
  'c3': {'a': 2, 'b': 2}, 
  'c4': {'a': 2, 'b': 3}, 
  'c5': {'a': 2, 'b': 4}, 
  'c6': {'a': 3, 'b': 2}, 
  'c7': {'a': 3, 'b': 3}, 
  'c8': {'a': 3, 'b': 4}}

推荐阅读