python - 在Python中组合字典中列表的所有排列

标签 python python-3.x list dictionary

给定初始字典

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

最佳答案

您可以使用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}}

关于python - 在Python中组合字典中列表的所有排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60122132/

相关文章:

python - BSSID(AP MAC 地址)无效

python - 列表理解返回 "generator object..."

python - 创建一个函数,当您使用 python 输入出生日期时,打印您的年龄(以年为单位)

arrays - 在数组的不同部分执行不同的函数。 python 3

python - 如何访问字典 python 中列表中的元素?

python - 使用 range() 以相反的顺序打印列表?

python - 检查某个键是否存在于包含函数返回的多个字典的元组中的任何字典中

python - pyqt中表格单元格的右对齐

python - 在 Python-3.x 中使用最大 CPU 功率进行多处理

python - 如何在不导入的情况下将列表列表转换为单个列表