簡體   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