创建每个步骤仅修改一个值的词典列表

时间:2017-12-06 16:07:14

标签: python list dictionary

我有一个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个字典。我提出了一些关于字典理解的问题,但他们没有给我一个解决我问题的输入

1 个答案:

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