如何利用itertools.product生成3个字典列表的全组合字典列表?
解决字典列表的全组合合并问题
嘿,你找对工具啦!itertools.product就是干这个的,你之前没成功应该是差了字典合并这一步。咱们直接上代码,一步一步来:
完整解决方案
首先导入需要的模块,然后用笛卡尔积生成所有组合,再把每个组合里的字典合并成一个新字典:
import itertools # 给定的三个字典列表 products = [{'product':'product1'},{'product':'product2'},{'product':'product3'},{'product':'product4'}] sales = [{'sale':'sale1'},{'sale':'sale2'}] invoices = [{'invoice':'invoice1'},{'invoice': 'invoice2'},{'invoice':'invoice3'}] # 生成所有笛卡尔积组合,再合并每个组合里的字典 result = [ {**p, **s, **i} for p, s, i in itertools.product(products, sales, invoices) ] # 打印结果(可选,验证用) for item in result: print(item)
代码解释
itertools.product(products, sales, invoices):会生成三个列表元素的所有笛卡尔积组合,每个组合是一个包含三个字典的元组(比如({'product':'product1'}, {'sale':'sale1'}, {'invoice':'invoice1'}))。{**p, **s, **i}:这是Python中合并多个字典的常用方式(兼容Python 3.5+),把三个字典的键值对合并到一个新字典里。如果你的Python版本是3.9及以上,也可以用更简洁的语法:p | s | i。
输出示例
运行代码后,你会得到所有可能的组合,比如开头几个会是:
{'product': 'product1', 'sale': 'sale1', 'invoice': 'invoice1'} {'product': 'product1', 'sale': 'sale1', 'invoice': 'invoice2'} {'product': 'product1', 'sale': 'sale1', 'invoice': 'invoice3'} {'product': 'product1', 'sale': 'sale2', 'invoice': 'invoice1'} ...
这样就完美得到你想要的全组合字典列表啦!
内容的提问来源于stack exchange,提问作者user1292656
相关产品推荐
相关产品推荐

