【问题标题】:How to iterate through all dictionary combinations如何遍历所有字典组合
【发布时间】:2020-11-02 11:51:41
【问题描述】:

假设我有以下字典

someDict = {
  'A': [1,2,3],
  'B': [4,5,6],
  'C': [7,8,9]
}

有没有一种简单的方法可以迭代,以便在循环中为所有可能的组合创建新字典,即。

{'A' : 1, 'B': 4, 'C':7}
{'A' : 1, 'B': 4, 'C':8}
{'A' : 1, 'B': 4, 'C':9}
{'A' : 2, 'B': 4, 'C':7}

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以按如下方式使用itertools.product

    from itertools import product
    
    someDict = {
        'A': [1, 2, 3],
        'B': [4, 5, 6],
        'C': [7, 8, 9]
    }
    
    keys, values = zip(*someDict.items())
    result = [dict(zip(keys, p)) for p in product(*values)]
    
    for d in result:
        print(d)
    

    输出

    {'A': 1, 'B': 4, 'C': 7}
    {'A': 1, 'B': 4, 'C': 8}
    {'A': 1, 'B': 4, 'C': 9}
    {'A': 1, 'B': 5, 'C': 7}
    {'A': 1, 'B': 5, 'C': 8}
    {'A': 1, 'B': 5, 'C': 9}
    {'A': 1, 'B': 6, 'C': 7}
    {'A': 1, 'B': 6, 'C': 8}
    {'A': 1, 'B': 6, 'C': 9}
    {'A': 2, 'B': 4, 'C': 7}
    {'A': 2, 'B': 4, 'C': 8}
    {'A': 2, 'B': 4, 'C': 9}
    {'A': 2, 'B': 5, 'C': 7}
    {'A': 2, 'B': 5, 'C': 8}
    {'A': 2, 'B': 5, 'C': 9}
    {'A': 2, 'B': 6, 'C': 7}
    {'A': 2, 'B': 6, 'C': 8}
    {'A': 2, 'B': 6, 'C': 9}
    {'A': 3, 'B': 4, 'C': 7}
    {'A': 3, 'B': 4, 'C': 8}
    {'A': 3, 'B': 4, 'C': 9}
    {'A': 3, 'B': 5, 'C': 7}
    {'A': 3, 'B': 5, 'C': 8}
    {'A': 3, 'B': 5, 'C': 9}
    {'A': 3, 'B': 6, 'C': 7}
    {'A': 3, 'B': 6, 'C': 8}
    {'A': 3, 'B': 6, 'C': 9}
    

    【讨论】:

      【解决方案2】:

      product 的另一种方法:

      p = product(*[product(k, v) for k, v in someDict.items()])
      
      for i in p:
          print(dict(i))
      

      输出:

      {'A': 1, 'B': 4, 'C': 7}
      {'A': 1, 'B': 4, 'C': 8}
      {'A': 1, 'B': 4, 'C': 9}
      {'A': 1, 'B': 5, 'C': 7}
      {'A': 1, 'B': 5, 'C': 8}
      {'A': 1, 'B': 5, 'C': 9}
      {'A': 1, 'B': 6, 'C': 7}
      {'A': 1, 'B': 6, 'C': 8}
      {'A': 1, 'B': 6, 'C': 9}
      {'A': 2, 'B': 4, 'C': 7}
      {'A': 2, 'B': 4, 'C': 8}
      {'A': 2, 'B': 4, 'C': 9}
      {'A': 2, 'B': 5, 'C': 7}
      {'A': 2, 'B': 5, 'C': 8}
      {'A': 2, 'B': 5, 'C': 9}
      {'A': 2, 'B': 6, 'C': 7}
      {'A': 2, 'B': 6, 'C': 8}
      {'A': 2, 'B': 6, 'C': 9}
      {'A': 3, 'B': 4, 'C': 7}
      {'A': 3, 'B': 4, 'C': 8}
      {'A': 3, 'B': 4, 'C': 9}
      {'A': 3, 'B': 5, 'C': 7}
      {'A': 3, 'B': 5, 'C': 8}
      {'A': 3, 'B': 5, 'C': 9}
      {'A': 3, 'B': 6, 'C': 7}
      {'A': 3, 'B': 6, 'C': 8}
      {'A': 3, 'B': 6, 'C': 9}
      

      【讨论】:

        猜你喜欢
        • 2018-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 2021-05-20
        • 1970-01-01
        • 1970-01-01
        • 2017-01-18
        相关资源
        最近更新 更多