def funct ( **kwargs ):
#code goes here
我有可变数量的参数传递给这个函数。参数的格式为key1:{set1},key2:{set2},依此类推
在功能内部,我希望得到以下数据结构:"合成"来自给定的kwargs
如果函数调用如 功能(key1 = {1,2,3},key2 = {4,5}) params通过我想要以下
[
{ key1 : 1, key2 : 4 },
{ key1 : 2, key2 : 4},
{ key1 : 3, key2 : 4},
{ key1 : 1, key2 : 5 },
{ key1 : 2, key2 : 5},
{ key1 : 3, key2 : 5}
]
如果函数传递了任意数量的键:,那么
应该以相同的方式工作。
我怎样才能做到这一点。解决方案越简单越好。
使用python 3.5
感谢。
答案 0 :(得分:1)
itertools.product
是一种方便的方法。
import itertools
def dict_product(**kwargs):
"""
Cartesian product of kwargs as dicts with the same keys.
>>> p = list(dict_product(key1=[1, 2, 3], key2=[4, 5]))
>>> p.sort(key=lambda d: d['key1'])
>>> p == [
... {'key1': 1, 'key2': 4},
... {'key1': 1, 'key2': 5},
... {'key1': 2, 'key2': 4},
... {'key1': 2, 'key2': 5},
... {'key1': 3, 'key2': 4},
... {'key1': 3, 'key2': 5},
... ]
True
"""
items = kwargs.items()
keys = [key for key, value in items]
sets = [value for key, value in items]
for values in itertools.product(*sets):
yield dict(zip(keys, values))