【问题标题】:How to create combinations of key values in a dictionary?如何在字典中创建键值组合?
【发布时间】:2020-09-30 06:50:16
【问题描述】:

我有以下代码工作:

from itertools import product


dict = { 'Orange' : [ 2,4,8],
         'Banana' :  [8,16,32]
        }
names = list(dict.keys())        
fruits ={}
offset =0
for combination in product ( *dict.values()):
    fruits[f'set{offset}'] = [[names[0] ,combination[0]], [names[1],combination[1]]]
    offset+=1;
print (fruits)

输出:

{'set0': [['Orange', 2], ['Banana', 8]],
 'set1': [['Orange', 2], ['Banana', 16]], 
 'set2': [['Orange', 2], ['Banana', 32]],
 'set3': [['Orange', 4], ['Banana', 8]],
 'set4': [['Orange', 4], ['Banana', 16]],
 'set5': [['Orange', 4], ['Banana', 32]],
 'set6': [['Orange', 8], ['Banana', 8]], 
 'set7': [['Orange', 8], ['Banana', 16]], 
 'set8': [['Orange', 8], ['Banana', 32]]
}

现在当我的字典增加时,会有更多的水果和更多的价值。我需要在 for 循环中手动处理它。如何扩展它?

【问题讨论】:

标签: python algorithm loops dictionary iterator


【解决方案1】:
  • 迭代项目:
  • 为每个项目制作所有组合键和值
  • 将所有这些存储在特定于该密钥的容器中
  • 迭代完成后,在所有容器中的所有项目之间进行组合。

从 pprint 导入 pprint 导入迭代工具

d = {'Orange' : [ 2,4,8],
     'Banana' :  [8,16,32],
     'pear': [9,7,5]
      }

out = {}
for k,v in d.items():
#    pprint(list(itertools.product([k],v)))
    out[k] = itertools.product([k],v)

final = itertools.product(*out.values())

【讨论】:

  • @IshanKumar - 见编辑。我认为第一个版本的价值太多了。
【解决方案2】:

替换这个:

[[names[0] ,combination[0]], [names[1],combination[1]]]

zip:

[[name, count] for name, count in zip(names, combination)]

这将允许它扩展到任何长度的列表,而无需指定每个索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 2023-01-24
    • 2021-08-06
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多