在值为另一个字典的字典中,如何更改第二个字典的特定值?

2024-05-14 19:36:07 发布

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

我有一个dict,它的键是西班牙食谱的名称,值是另一个字典,其中包含该配料的键=配料,值=qt:

new_dic = {
    'Conejo al ajillo': {
        'hoja de laurel': '1',
        'ccs de aceite': '50',
        'cabeza de ajos': '1',
        'vaso de vino': '1',
        'kilos de conejo': '1.5',
        'guindillas': '3'},
    'Pimientos verdes rellenos de codornices.': {
        'ccs de aceite': '80',
        'cucharadas de agua': '2',
        'dientes de ajo': '2',
        'cebolla': '1',
        'cucharada de chocolate rallado ': '1',
        'codornices': '6',
        'cucharada de harina': '1',
        'vaso de jerez seco': '1',
        'pimientos verdes grandes': '6',
        'gramos de sal': '5',
        'gramos de tocino de jamón': '50'},
    'Pollo a la leonesa.': {
        'cucharadas de jerez': '2',
        'huevo': '1',
        'gramos de jamon': '50',
        'gramos de trufa en lata ': '25',
        'ccs de leche': '100',
        'manzana reineta': '1',
        'gramos de menudillos de pollo': '200',
        'gramos de miga de pan ': '100',
        'kilos de pollo': '1.5',
        'gramos de tocino': '50',
        'ccs de aceite': '50',
        'gramos de manteca': '50'},
    'Pollo de corral al chilindron': {
        'ccs de aceite': '150',
        'dientes de ajo': '6',
        'gramos de cebolla ': '400',
        'gramos de harina': '60',
        'hoja de laurel': '1',
        'pizca de pimienta': '1',
        'kilos de pollo': '2',
        'pizca de sal': '1',
        'gramos de tomate frito': '50',
        'gramos de tomates ': '300',
        'ramito de tomillo': '1',
        'pimientos verdes': '2'},
    'Pavo relleno de castanas': {
        'cucharadas de caldo': '7',
        'gramos de castanas cocidas ': '500',
        'cucharada de harina': '1',
        'gramos de magro de cerdo ': '250',
        'gramos de manteca': '100',
        'kilos de pavo tierno': '2.5',
        'cucharadita de pimienta ': '1',
        'pizca de sal': '1',
        'pavo': '1'},
    'Conejo a la castellana.': {
        'cucharadas de aceite ': '7',
        'vaso de agua': '1',
        'vaso de caldo': '1',
        'conejo': '1',
        'cucharada de harina ': '1',
        'gramos de jamon': '50',
        'gramos de manteca de cerdo ': '50',
        'gramos de pan': '150',
        'pizca de sal': '1',
        'vasito de vino blanco': '1'},
    'Gazpacho manchego': {
        'cucharadas de aceite de oliva ': '6',
        'dientes de ajo': '4',
        'gramos de conejo': '400',
        'pizca de pimenton dulce': '1',
        'pizca de pimienta': '1',
        'pellizco de sal': '1',
        'gramos de tomate ': '30',
        'torta manchega': '1'},
    'Lomo de ciervo en salsa de setas y trufa.': {
        'ccs de aceite de oliva': '180',
        'dientes de ajos': '6',
        'gramos de cebollas pequenas': '200',
        'hoja de laurel': '1',
        'filetes de lomo de ciervo de unos ': '12',
        'gramos cada uno ': '75',
        'taza de nata liquida': '1',
        'cucharadita de oregano': '1',
        'cucharadas de pimenton dulce ': '2',
        'pizca de sal': '1',
        'gramos de setas cocidas': '200',
        'cucharaditas de tomillo': '0.5',
        'trufa en aguardiente': '1'}
        ...}

我创建了一个标准化变量,以便将所有的量标准化为克

standardize={
        'alcachofas':200,
        'apio': 400,
        'berenjena': 180,
        'berenjenas': 180,
        'cabeza': 150,
        'cabezas': 150,
        'calabacin': 200,
        'cebolla': 75,
        'cebolletas': 75,
        'chorreon': 10,
        'chorreon': 10,
        'chorreton': 10,
        'chorrito': 5,
        'chuchradas':10,
        'cigalas': 80,
        'clavo': 3,
        'clavos': 3,
        'cocochas': 70,
        'codornices': 80,
        'conejo':80,
        'copa':100
         ... }

我试图创建一个函数,该函数可以遍历Standardized和new_dict,每次new_dict包含Standardized中的成分时,它都会通过乘以其旧值*Standardized值来更改其值

例如,在第一个配方中,有一个“cabeza”,在标准化中,它的值是150,所以我想从这里转换过来

{'Conejo al ajillo': {'hoja de laurel': '1',
  'ccs de aceite': '50',
  'cabeza de ajos': '1',
    ...

对此

{'Conejo al ajillo': {'hoja de laurel': '1',
  'ccs de aceite': '50',
  'cabeza de ajos': '150',
    ...

因为1*150等于150(这意味着它的值以克为单位)

我一直在尝试,我很接近,但同时我认为,这是我的代码:


def stand(dic):
    for e in standardize:
        for i in dic.values():
            for key,value in i.items():
                if e in key:
                    #print(i)
                    #print(key)
                    #print(value)
                    #print(e)
                    value = float(value)*float(standardize[e])
                    print(value)
                return dic

它返回我想要的值,但我不会在new_dict中更改它

有什么帮助吗

提前非常感谢


Tags: newvaluededictprintccsdicsal
3条回答

您需要更新字典本身,而不仅仅是value变量

请注意,您可以通过直接在standardize中测试字典成员身份来简化方法,而不是在其键上循环:

def standardize_nested_dict(dic):
    for ingredients_dict in dic.values():
        for ingredient, raw_value in ingredients_dict.items():
            if ingredient in standardize:  # No need to use an extra loop for this
                standardized_value = raw_value * standardize[ingredient]
                ingredients_dict[ingredient] = standardized_value  # Update the dictionary explicitly

当您执行value = float(value)*float(standardize[e])时,您告诉Python创建一个新变量value,并在那里分配响应。因此,您永远不会更新字典中的值

如果您希望将结果分配回其来源的词典,您可以执行以下操作:

i[key] = float(value)*float(standardize[e])

正如其他人提到的,您正在创建一个新变量value,而不是更新关联的字典。下面是一个实现目标的可读方法

def stand(dic):
    # For each recipe and ingredients dictionary
    for recipe, ingredients in dic.items(): 
        # For each ingredient and amount in ingredients dictionary
        for ingredient, amount in ingredients.items(): 
            # Split ingredient into separate words
            for word in ingredient.split(' '):
                # Check if word exists in the standardize dictionary
                if word in standardize: 
                    # If there is a match, then update the ingredient with its new amount
                    dic[recipe][ingredient] = float(amount) * standardize[word]

    return dic

print(stand(new_dic))

输出

{
    "Conejo al ajillo": {
        "hoja de laurel": "1",
        "ccs de aceite": "50",
        "cabeza de ajos": 150.0,
        "vaso de vino": "1",
        "kilos de conejo": 120.0,
        "guindillas": "3"
    },
    "Pimientos verdes rellenos de codornices.": {
        "ccs de aceite": "80",
        "cucharadas de agua": "2",
        "dientes de ajo": "2",
        "cebolla": 75.0,
        "cucharada de chocolate rallado ": "1",
        "codornices": 480.0,
        "cucharada de harina": "1",
        "vaso de jerez seco": "1",
        "pimientos verdes grandes": "6",
        "gramos de sal": "5",
        "gramos de tocino de jam\u00f3n": "50"
    },
    "Pollo a la leonesa.": {
        "cucharadas de jerez": "2",
        "huevo": "1",
        "gramos de jamon": "50",
        "gramos de trufa en lata ": "25",
        "ccs de leche": "100",
        "manzana reineta": "1",
        "gramos de menudillos de pollo": "200",
        "gramos de miga de pan ": "100",
        "kilos de pollo": "1.5",
        "gramos de tocino": "50",
        "ccs de aceite": "50",
        "gramos de manteca": "50"
    },
    "Pollo de corral al chilindron": {
        "ccs de aceite": "150",
        "dientes de ajo": "6",
        "gramos de cebolla ": 30000.0,
        "gramos de harina": "60",
        "hoja de laurel": "1",
        "pizca de pimienta": "1",
        "kilos de pollo": "2",
        "pizca de sal": "1",
        "gramos de tomate frito": "50",
        "gramos de tomates ": "300",
        "ramito de tomillo": "1",
        "pimientos verdes": "2"
    },
    "Pavo relleno de castanas": {
        "cucharadas de caldo": "7",
        "gramos de castanas cocidas ": "500",
        "cucharada de harina": "1",
        "gramos de magro de cerdo ": "250",
        "gramos de manteca": "100",
        "kilos de pavo tierno": "2.5",
        "cucharadita de pimienta ": "1",
        "pizca de sal": "1",
        "pavo": "1"
    },
    "Conejo a la castellana.": {
        "cucharadas de aceite ": "7",
        "vaso de agua": "1",
        "vaso de caldo": "1",
        "conejo": 80.0,
        "cucharada de harina ": "1",
        "gramos de jamon": "50",
        "gramos de manteca de cerdo ": "50",
        "gramos de pan": "150",
        "pizca de sal": "1",
        "vasito de vino blanco": "1"
    },
    "Gazpacho manchego": {
        "cucharadas de aceite de oliva ": "6",
        "dientes de ajo": "4",
        "gramos de conejo": 32000.0,
        "pizca de pimenton dulce": "1",
        "pizca de pimienta": "1",
        "pellizco de sal": "1",
        "gramos de tomate ": "30",
        "torta manchega": "1"
    },
    "Lomo de ciervo en salsa de setas y trufa.": {
        "ccs de aceite de oliva": "180",
        "dientes de ajos": "6",
        "gramos de cebollas pequenas": "200",
        "hoja de laurel": "1",
        "filetes de lomo de ciervo de unos ": "12",
        "gramos cada uno ": "75",
        "taza de nata liquida": "1",
        "cucharadita de oregano": "1",
        "cucharadas de pimenton dulce ": "2",
        "pizca de sal": "1",
        "gramos de setas cocidas": "200",
        "cucharaditas de tomillo": "0.5",
        "trufa en aguardiente": "1"
    }
}

您可以使用print(json.dumps(stand(new_dic), indent=4))将输出格式化为此可读格式

相关问题 更多 >

    热门问题