繁体   English   中英

如何使用 JSON python 创建一个包含列表的动态字典?

[英]how to create a dynamic dictionary with lists in it using JSON python?

我有包含 4 个列表的字典格式,最后,我想将其转换为 JSON。

modelOutput = {
        "projectYears": 1,
        "RevSev": [
            {
                "name": "FixedSavings",
                "fixedSavingsCost": []
            }, {
                "name": "variableSavings",
                "variableSavingsCost": []
            }, {
                "name": "startUpSavings",
                "startUpSavingsCost": []
            }, {
                "name": "shutDownSavings",
                "shutDownSavingsCost": []
            },
        ],
}

因此,如果projectYear值为 2,那么将有 2 个字典,其中包含 4 个列表(成本),每个字典中有 2 个随机值。 预期 output:

#if projectYear = 2
modelOutput = {
        "projectYears": 1,
        "RevSev": [
            {
                "name": "FixedSavings",
                "fixedSavingsCost": [12,22]
            }, {
                "name": "variableSavings",
                "variableSavingsCost": [11,15]
            }, {
                "name": "startUpSavings",
                "startUpSavingsCost": [32,21]
            }, {
                "name": "shutDownSavings",
                "shutDownSavingsCost": [21,33]
            },
        ],
"projectYears": 2,
        "RevSev": [
            {
                "name": "FixedSavings",
                "fixedSavingsCost": [32,23]
            }, {
                "name": "variableSavings",
                "variableSavingsCost": [23,12]
            }, {
                "name": "startUpSavings",
                "startUpSavingsCost": [14,32]
            }, {
                "name": "shutDownSavings",
                "shutDownSavingsCost": [14,13]
            },
        ],

同样,如果projectYears为 3,则将有 3 个字典,其中有 4 个列表和每个列表中的 3 个值。 我能够根据projectYears在列表中创建随机值,但无法从中形成单独的字典。 我的方法:

projectLife = 3


modelOutput['RevSev'][0]['fixedSavingsCost'] = [random.randrange(1, 50, 1) for i in range(projectLife)]
modelOutput['RevSev'][0]['variableSavingsCost'] = [random.randrange(1, 50, 1) for i in range(projectLife)]
modelOutput['RevSev'][0]['startUpSavingsCost'] = [random.randrange(1, 50, 1) for i in range(projectLife)]
modelOutput['RevSev'][0]['shutDownSavingsCost'] = [random.randrange(1, 50, 1) for i in range(projectLife)]

json.dumps(modelOutput)

这是一个相当简单的方法,给定上面的modelOutput作为输入(或者甚至只给出你想要的年数):

years = modelOutput["projectYears"]

randoms = lambda y: np.random.randint(10, 30, y)

res = []
for year in range(1, years+1):
    new_year = {
        "projectYears": year, 
        "RevSev": [
            {
                "name": "FixedSavings",
                "fixedSavingsCost": randoms(years)
            }, {
                "name": "variableSavings",
                "variableSavingsCost": randoms(years)
            }, {
                "name": "startUpSavings",
                "startUpSavingsCost": randoms(years)
            }, {
                "name": "shutDownSavings",
                "shutDownSavingsCost": randoms(years)
            }
        ]
    }
    res.append(new_year)

“2”的结果是:

[{'projectYears': 1,
  'RevSev': [{'name': 'FixedSavings', 'fixedSavingsCost': array([24, 22])},
   {'name': 'variableSavings', 'variableSavingsCost': array([11, 12])},
   {'name': 'startUpSavings', 'startUpSavingsCost': array([27, 22])},
   {'name': 'shutDownSavings', 'shutDownSavingsCost': array([25, 17])}]},
 {'projectYears': 2,
  'RevSev': [{'name': 'FixedSavings', 'fixedSavingsCost': array([15, 19])},
   {'name': 'variableSavings', 'variableSavingsCost': array([20, 13])},
   {'name': 'startUpSavings', 'startUpSavingsCost': array([26, 22])},
   {'name': 'shutDownSavings', 'shutDownSavingsCost': array([24, 25])}]}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM