2016-08-08 60 views
-1
def funct (**kwargs): 
    #code goes here 

我有可變數量的參數傳遞給此函數。該參數是形式爲key1:{設置1},KEY2:{設定2},等等關鍵字kwargs字典列表:集對

設定的功能裏面我想有以下數據結構的一些如何從給定的kwargs

如果「合成」該功能被稱爲像 本功能(鍵1 = {1,2,3},鍵2 = {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

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