我有一个字典,其键是西班牙食谱的名称,值是另一本词典,其中包含key =成分和value =该成分的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
... }
我试图创建一个遍历standard和new_dict的函数,并且每当new_dict包含标准化的成分时,它都会通过乘以其旧值*标准化值来更改其值。
例如,在第一个配方中有一个“ 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中更改它。
请帮忙吗?
非常感谢您!
答案 0 :(得分:1)
正如其他人所述,您正在创建一个新变量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))
将输出格式化为可读格式。
答案 1 :(得分:0)
执行value = float(value)*float(standardize[e])
时,是在告诉Python创建一个新变量value
并在其中分配响应。因此,您永远不会更新字典中的值。
如果您希望将结果分配回它来自的字典,则可以执行以下操作:
i[key] = float(value)*float(standardize[e])
答案 2 :(得分:0)
您需要更新字典本身,而不仅仅是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
答案 3 :(得分:0)
for dic in [new_dic[key] for key in list(new_dic)]:
for ke in list(dic):
if ke in list(standardize):
dic.update({ke:str(int(dic[ke])*int(standardize[ke]))})