【发布时间】:2016-11-15 23:20:36
【问题描述】:
我正在制作一个python程序,其中随机值生成n次,用作模型模拟的参数值。
我有一个定义每个参数边界的字典,例如:
parameters = {'A': random.uniform(1,10), 'B': random.uniform(20,40)}
我想添加一些总和必须为 1 的参数,例如:
params = {'C1': random.uniform(0.0,1.0), 'C2': 1 - params['C1']}
后者显然无法生成KeyError: 'C1'
我也尝试过类似的方法:
params = {'A': random.uniform(1,10), 'B': random.uniform(20,40), 'C': {'C1': None,'C2': None}}
def class_fractions():
for key in params['C']:
if key == 'C1':
params['C'][key] = random.uniform(0.0,1.0)
if key == 'C2':
params['C'][key] = 1.0 - params['C'][key]
但是在调用函数后我得到了 TypeError
TypeError: unsupported operand type(s) for -: 'float' and 'NoneType'
有什么建议吗?
【问题讨论】:
-
您的 for 循环将不起作用,因为 dict 不保证订单。所以C2可以在C1之前执行。
-
params['C']['C2']始终为None。从未赋值。
标签: python dictionary random