我有一个python字典,它描述了一组这样的参数:
params = {'V0': 0.040239623194206875, 'theta': 0.2133407345978868,
'omega': 0.8624391468911115, 'kappa': 0.8632687388218084,
'rho': -0.7680944602881048}
集合中的每个参数都有一个代表其变化的常数。从这样的集合我想构建一个字典列表,直到我有100组参数。背后的逻辑是我想要例如将params['V0']
更改为
params['V0'] += deltaV0
params['V0'] -= deltaV0
修复其他值,获取另外2个不同的词典添加到我的列表中。我的问题是我无法在代码中改变我的想法。框架应该是这样的:
good_set = [params]
while len(good_set) < 100:
good_set.append(new params)
如何从最初的词典中有效地获取新词典?我需要同时从每个参数的初始字典中获取2个新字典(因为每次添加和减去变化),所以总共每次迭代我应该添加到我的列表中5 * 2 = 10个字典。我提出了一些关于字典理解的问题,但他们没有给我一个解决我问题的输入
答案 0 :(得分:1)
嗯,你只需要创建一个.copy
的dict,然后适当地改变它。例如:
In [3]: params = {'V0': 0.040239623194206875, 'theta': 0.2133407345978868,
...: 'omega': 0.8624391468911115, 'kappa': 0.8632687388218084,
...: 'rho': -0.7680944602881048}
...:
In [4]: results = []
In [5]: import random
In [6]: for _ in xrange(100):
...: sample_params = params.copy()
...: sample_params['V0'] += random.random()
...: results.append(sample_params)
我使用random.random()
作为delta值,您可以使用自定义逻辑来修改所需的方式。
如果您的delta是常量,并且可以添加,减去或不考虑生成测试用例,您可以尝试
params = {'V0': 0.040239623194206875, 'theta': 0.2133407345978868,
'omega': 0.8624391468911115, 'kappa': 0.8632687388218084,
'rho': -0.7680944602881048}
import random
delta = {'V0': random.random(),
'theta': random.random(),
'omega': random.random(),
'kappa': random.random(),
'rho': random.random()}
list_of_params = [ {key: params[key] + random.randint(-1, 1) * delta[key] for key in params} for _ in xrange(100)]
此处,delta存储在dict中,random.randint(-1, 1)
负责随机添加,减去或忽略特定的delta。