Python 创建字典列表,每一步只修改一个值

Python 创建字典列表,每一步只修改一个值,python,list,dictionary,Python,List,Dictionary,我有一个python字典,它描述了一组如下参数: params = {'V0': 0.040239623194206875, 'theta': 0.2133407345978868, 'omega': 0.8624391468911115, 'kappa': 0.8632687388218084, 'rho': -0.7680944602881048} 集合中的每个参数都有一个表示其变化的常量。从这个集合中,我想构造一个字典列表,直到我有100组参数。背后的逻辑是,例如,我希望将param

我有一个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
在其他值固定的情况下,获取另外两个不同的字典以添加到我的列表中。我的问题是我无法在代码中转换我的想法。框架应类似于:

good_set = [params]

while len(good_set) < 100:


good_set.append(new params)
good_set=[params]
而len(良好_集)<100:
良好的设置。追加(新参数)

如何有效地从最初的词典中获取新词典?对于每个参数,我需要从初始字典中同时获得两个新字典(因为每次都会添加和减去变量),因此每次迭代我应该总共添加到列表中5*2=10个字典。我问了一些关于听写理解的问题,但他们没有给我一个解决问题的输入。你只需要创建一个听写的
。副本
,然后进行适当的更改。对于exmaple:

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()
作为增量值,您可以使用自定义逻辑来修改所需的方式


如果您的增量是常量,并且可以在生成测试用例时添加、减去或不考虑它们,那么您可以尝试

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

这里,增量存储在dict中,
random.randint(-1,1)
负责随机添加、减去或忽略特定增量。

复制原始dict
params.copy()
然后修改副本。这样行吗?这是一个很好的起点。然而,通过这种方式,我只添加了另一本新词典100次。我会把它同其他9个字典一起加上1次,这些字典考虑了其他参数的上下变化。我知道我要求很多。我只是想知道是否有可能只用一段话就完成了,然后在新获得的词典上重复同样的步骤。@Alexbrini我不确定我是否理解正确,但不管你选择怎么做,你最终都会复制100本。现在,如果你有一种生成增量的方法,你可以使用dict理解。然而,这基本上仍然是100份。我已经为这个场景添加了一个假设的例子,但是你需要在一个非常可控的范围内提出一个新的问题,才能得到你想要的答案。@Alexbrini与此同时,如果我的答案有帮助,不要忘了勾选它来接受它:)@mu無 是否可能使用
random.randint(-1,1)
我们从不添加增量,因为1被排除在外?@Alexbrini我记得在python2文档中,randint的两个范围数都包含在内,因此randint(-1,1)将随机发出-1、0或1。您可能需要检查其他python版本。