我现在正在工作的项目需要一些声明性的定义方式 一堆实验的设置。
到目前为止,我找到了这样的解决方案。 有一些数据结构使用JSON公开默认设置:
{
"trustRatio": 0.7,
"filter.coefA": 0,
"filter.coefB": 1,
"filter.coefC": 2,
"filter.coefD": 3
}
然后,要设置实验,我们必须指定要更改的字段 在运行实验时。现在我这样做:
{
"path": "filter.coefA",
"values": [0, 1, 2, 3, 4, 5]
}
或
{
"path": "filter.coefA",
"min": 0
"max": 5,
"step": 1
}
然后我将默认和“渐变”设置实例化为词典 并使用“path”键使用默认设置创建一组实验设置 作为样板和价值作为实验里程碑。
使用我正在使用的Python或CSharp可以轻松实现此解决方案 但它不是最好的,因为我存储默认和 “渐变”设置分开。另一件事是我无法使用 像这样的层次结构:
{
"trustRatio": 0.7,
"filter":
{
"coefA": 0,
"coefB": 1,
"coefC": 2,
"coefD": 3
}
}
因为字典在实现时遇到了限制 Python和CSharp中的解决方案。
有谁知道是否有任何Python或CSharp(或至少其他CLR兼容语言,如FSharp)工具可以实现 通过在现场声明“渐变”来获取一系列实验设置:
{
"trustRatio": 0.7,
"filter":
{
"coefA": [0, 1, 2, 3, 4, 5],
"coefB": 1,
"coefC": 2,
"coefD": 3
}
}
答案 0 :(得分:0)
在Python中,有几种用于克隆字典结构的内置方法:dict.copy()和copy.deepcopy() Deepcopy将处理任何深度的多维词典,AFAIK。 所以你可以: -
>>> gradient = {
... "trustRatio": 0.7,
... "filter":
... {
... "coefA": [0, 1, 2, 3, 4, 5],
... "coefB": 1,
... "coefC": 2,
... "coefD": 3
... }
... }
>>>
>>> gradient2 = gradient.copy()
>>> print gradient2
{'filter': {'coefD': 3, 'coefA': [0, 1, 2, 3, 4, 5], 'coefB': 1, 'coefC': 2}, 'trustRatio': 0.7}
>>> import copy
>>> print copy.deepcopy( gradient )
{'filter': {'coefD': 3, 'coefA': [0, 1, 2, 3, 4, 5], 'coefB': 1, 'coefC': 2}, 'trustRatio': 0.7}
>>> gradient.copy() == copy.deepcopy( gradient ) == gradient
True
答案 1 :(得分:0)