[英]Problem converting list to nested dictionary in Python
我对 Python 相当陌生,并且正在使用嵌套字典。 我从下面的网页收到一个字典列表是一个例子:
Recipes = [{'Ingredient': 'Pork Mince', 'Quantity': 1, 'Recipe': 'Chilli Tofu'},
{'Ingredient': 'Courgettes', 'Quantity': 2, 'Recipe': 'Chilli Tofu'},
{'Ingredient': 'Firm Tofu', 'Quantity': 1, 'Recipe': 'Chilli Tofu'},
{'Ingredient': 'Garlic', 'Quantity': 1, 'Recipe': 'Chilli Tofu'},
{'Ingredient': 'Chilli Bean Paste', 'Quantity': 1, 'Recipe': 'Chilli Tofu'},
{'Ingredient': 'Chillies', 'Quantity': 1, 'Recipe': 'Chilli Tofu'},
{'Ingredient': 'Spring Onions', 'Quantity': 2, 'Recipe': 'Chilli Tofu'},
{'Ingredient': 'Courgettes', 'Quantity': 2, 'Recipe': 'Prawn & Courgettes'},
{'Ingredient': 'Prawns', 'Quantity': 1, 'Recipe': 'Prawn & Courgettes'},
{'Ingredient': 'Onions', 'Quantity': 1, 'Recipe': 'Prawn & Courgettes'},
{'Ingredient': 'Garlic', 'Quantity': 1, 'Recipe': 'Prawn & Courgettes'},
{'Ingredient': 'Chillies', 'Quantity': 1, 'Recipe': 'Prawn & Courgettes'}]
我想将其格式化为嵌套字典,以便最终将字典的“配方”值作为键,并将成分和数量作为子字典的一部分。 所以它看起来像这样......
{'Chilli Tofu': {
'Spring Onions': 2,
'Pork Mince': 1,
'Firm Tofu': 1,
'Courgettes': 2,
'Garlic': 1,
'Chilli Bean Paste': 1,
'Chillies':1,
'Spring Onions': 2
},
'Prawn & Courgettes': {
'Chillies': 1,
'Courgettes': 2,
etc...
}}
我可以通过以下代码部分实现:
format_recipes = {}
for r in recipes:
format_recipes[r['Recipe']] = {r['Ingredient']: r['Quantity']}
但是,当我运行上述内容时,我只会得到一个包含以下内容的字典:
{'Chilli Tofu': {'Spring Onions': 2}, 'Prawn & Courgettes': {'Chillies': 1}}
似乎我的嵌套字典在循环中不断被覆盖,我只能得到该食谱列表中的最后一个成分和数量。
我不确定如何防止这种情况发生,并将 append 放到键:值对列表中,而不是覆盖它们。 有任何想法吗?
干杯
问题是您实际上是在每次迭代替换配方,您需要将 append 它作为字典列表:
首先,您需要为每个配方定义空列表,然后 append 每个成分
解决方案:
format_recipes = {}
for r in recipes:
format_recipes[r['Recipe']] = []
for r in recipes:
format_recipes[r['Recipe']].append({r['Ingredient']: r['Quantity']})
每次执行时都会覆盖字典值:
format_recipes[r['Recipe']] = {r['Ingredient']: r['Quantity']}
您可以将update
与setdefault
一起使用,这将设置初始嵌套字典:
format_recipes = {}
for item in Recipes:
format_recipes.setdefault(item['Recipe'], {}).update({item['Ingredient']: item['Quantity']})
format_recipes 将是:
{'Chilli Tofu': {'Pork Mince': 1,
'Courgettes': 2,
'Firm Tofu': 1,
'Garlic': 1,
'Chilli Bean Paste': 1,
'Chillies': 1,
'Spring Onions': 2},
'Prawn & Courgettes': {'Courgettes': 2,
'Prawns': 1,
'Onions': 1,
'Garlic': 1,
'Chillies': 1}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.