在下一个示例中,我创建了一个类Sample
,它接受关键字参数字典,如:
import numpy as np
class Sample:
def __init__(self, **kwargs):
self.A = kwargs['A']
self.B = kwargs['B']
self.C = kwargs['C']
self.D = kwargs['D']
self.E = kwargs['E']
self.F = kwargs['F']
self.G = kwargs['G']
以及创建类对象列表的函数,如:
def createSampleList (As, Bs, Cs, **kwargs):
sampleList = []
for A in As:
for B in Bs:
for C in Cs:
addedkwargs = {'A': A, 'B': B, 'C': C}
kwargs = dict(kwargs,**addedkwargs)
sampleList.append (Sample (**kwargs))
return sampleList
到目前为止,如果我像定义中那样给它一个位置参数列表,那么这个函数工作得很好,因此
As = np.linspace (0, 3, 3)
Bs = np.linspace (0, 3, 4)
Cs = np.linspace (0, 3, 6)
D = 3
E = 5
F = 8
G = 9
sampleList = createSampleList (
As, Bs, Cs, **{
'D' : D,
'E' : E,
'F' : F,
'G' : G,
})
一切正常。对于Instance:
print(len(sampleList))
>>> 72
现在,我希望能够使用关键字参数可变长度的字典调用函数createSampleList
。说:
sampleList = createSampleList2 (
{'A': As, 'B': Bs, 'C': Cs, 'D' : D }, **{
'E' : E,
'F' : F,
'G' : G,
})
我试过类似的东西
def createSampleList2 (arrayDict, **kwargs):
sampleList = []
addedkwargs = dict()
for key in arrayDict.keys():
for value in arrayDict[key]:
addedkwargs[key]= value
kwargs = dict(kwargs,**addedkwargs)
sampleList.append (Sample (**kwargs))
return sampleList
当然,这是行不通的。有什么建议吗
如果我理解正确,您想要的是创建给定列表的产品。如果是这样,您可以使用来自
itertools
的Python产品。下面的代码使用itertools.product
生成列表值的所有可能组合。为了使事情更简单,不可编辑(例如简单数字)被替换为一项长列表:此函数将接受
array_dict
中的值和列表的任意组合。因此,以下所有内容都是等效的:相关问题 更多 >
编程相关推荐