数组在python中添加到字典时不断被替换

2024-06-30 08:32:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个JSON对象,它基本上是一个字典。这是我创建字典的代码:

# Adding the data to the JSONData object
JSONData[str(gerechtNaam)] = { 
    "afbeeldingURL": gerechtAfbeelding,
    "receptURL": recept,
    "prijs": totalePrijs,
    "porties": porties,
    "moeilijkheid" :moeilijkheid,
    "caloriePortie": calorien,
    "voorbereidingsTijd": voorbereidingsTijd,
    "wachtTijd": wachtTijd,
    "totaleTijd": totaleTijd,
    "ingredienten": naamEnKwantiteitIngredienten
}

这将起作用,并生成以下内容:

{
    'Gerooktekipsalade met avocado en walnoten': { 
        'afbeeldingURL': 'https://static-images.jumbo.com/product_images/Recipe_502535-01_560x560.jpg',
        'receptURL': 'http://www.jumbo.com/gerooktekipsalade-met-avocado-en-walnoten/502535/',
        'prijs': 16.868000000000002,
        'porties': '4 porties',
        'moeilijkheid': 'Eenvoudig',
        'caloriePortie': '842 kcal per persoon',
        'voorbereidingsTijd': '15 min',
        'wachtTijd': '0',
        'totaleTijd': '15 min',
        'ingredienten': [
            '2 kroppen minisla romaine ',
            '200 g cherrytomaatjes',
            '4 stengels bleekselderij',
            '2 friszoete handappels ',
            '380 g Nieuwe Standaard Kip gerookte kipfilet ',
            '2 bosuitjes',
            '2 avocado',
            '150 ml whisky-cocktailsaus',
            '3 el bieslook',
            '60 g walnoten',
            '1 stokbrood',
            '1 snufje peper'
        ]
    }
}

然后使用以下代码转换:

with open('receptData.json', 'w') as outfile: json.dump(JSONData, outfile)

这样就可以工作了,并生成了工作的JSON。唯一的问题是,当尝试在for循环中两次运行代码时,最后一个变量名为'ingredienten',它是在循环中创建的一个列表,被字典中所有对象替换。因此,当创建第二个“ingredienten”数组时,已经创建并添加到JSONData的“ingredienten”数组将被新数组替换。所有其他变量都保持正确,但是每次循环运行时列表/数组都会被替换

所以代码第二次运行时,我得到的字典是:

{
    'Gerooktekipsalade met avocado en walnoten': {
        'afbeeldingURL': 'https://static-images.jumbo.com/product_images/Recipe_502535-01_560x560.jpg',
        'receptURL': 'http://www.jumbo.com/gerooktekipsalade-met-avocado-en-walnoten/502535/',
        'prijs': 16.868000000000002,
        'porties': '4 porties',
        'moeilijkheid': 'Eenvoudig',
        'caloriePortie': '842 kcal per persoon',
        'voorbereidingsTijd': '15 min',
        'wachtTijd': '0',
        'totaleTijd': '15 min',
        'ingredienten': **[
            '4 avocado',
            '100 g gerookte zalm',
            '8 kleine eieren ',
            '25 g alfalfa',
            '1 snufje peper',
            '1 bakplaat'
        ]**
    },
    'Gevulde avocado met ei en zalm uit de oven': {
        'afbeeldingURL': 'https://static-images.jumbo.com/product_images/Recipe_502536-01_560x560.jpg',
        'receptURL': 'http://www.jumbo.com/gevulde-avocado-met-ei-en-zalm-uit-de-oven/502536/',
        'prijs': 8.72,
        'porties': '4 porties',
        'moeilijkheid': 'Eenvoudig',
        'caloriePortie': '234 kcal per persoon',
        'voorbereidingsTijd': '10 min',
        'wachtTijd': '15 min',
        'totaleTijd': '25 min',
        'ingredienten': **[
            '4 avocado',
            '100 g gerookte zalm',
            '8 kleine eieren ',
            '25 g alfalfa',
            '1 snufje peper',
            '1 bakplaat'
        ]**
    }
}

其中第一个“ingredienten”列表现在与第二个列表相同,但事实并非如此。我试过很多种方法,但都没用


Tags: com字典minenimagesmetavocadojumbo
1条回答
网友
1楼 · 发布于 2024-06-30 08:32:21

虽然您还没有展示创建它的代码,但我很确定问题是您正在重用变量naamEnKwantiteitIngredienten,这是您正在使用的列表,作为字典中'ingredienten'键所指向的值。如果该列表被适当地修改(也许是用一组不同的成分填充),如果您还没有将其转储到JSON字符串中,您还可以在以前的字典中看到修改过的版本

我认为有两种方法可以解决这个问题

一种是在创建字典之后立即创建JSON,而不是等到以后再创建。虽然这样可以解决这个问题,但可能会给程序带来不便(或者不可能,如果出于其他原因需要同时定义所有词典)

另一种解决方案是确保您创建的词典相互独立。与其在所有列表中重复使用相同的列表,不如确保每个列表都包含一个单独的列表。最明显的解决方法可能是在任何地方创建最终位于naamEnKwantiteitIngredienten的值,但是可以在显示的代码中解决它,方法是在将列表放入字典之前复制列表:

JSONData[str(gerechtNaam)] = { 
    "afbeeldingURL": gerechtAfbeelding,
    "receptURL": recept,
    "prijs": totalePrijs,
    "porties": porties,
    "moeilijkheid" :moeilijkheid,
    "caloriePortie": calorien,
    "voorbereidingsTijd": voorbereidingsTijd,
    "wachtTijd": wachtTijd,
    "totaleTijd": totaleTijd,
    "ingredienten": naamEnKwantiteitIngredienten[:]     # slice here to copy the list!
}

相关问题 更多 >