来自kwargs of key的词典列表:set pair

时间:2016-08-08 22:39:40

标签: python

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

感谢。

1 个答案:

答案 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))