克隆数据结构的任何声明方式?

时间:2012-05-10 09:07:24

标签: c# python json

我现在正在工作的项目需要一些声明性的定义方式 一堆实验的设置。

到目前为止,我找到了这样的解决方案。 有一些数据结构使用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
    }
}

2 个答案:

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

通过网络搜索后,我已经为此问题实施了自己的解决方案。 它完全符合我的要求。它的描述可以找到here。和CSharp源代码以及一些示例here