我想创建一个成分摘要,但是我不知道该如何忽略元素,我已经算过...
试图删除访问过的元素,但以索引错误结束
源看起来像:
<br>
1.[(Ing1,350grams),(Ing4,200grams)]<br>
2.[(Ing2,2000grams),(Ing1,250grams),(Ing7,50grams),(Ing5,100grams)]<br>
3.[(Ing1,100grams),(Ing7,120grams)]<br>
4.[(Ing3,80grams),(Ing5,70grams),(Ing1,90grams)]<br>
...
这些应导致:
<br>
Ing1:790grams<br>
Ing2:2000grams<br>
Ing3:80grams<br>
Ing4:200grams<br>
Ing5:170grams<br>
Ing7:170grams<br>
我尝试了以下代码: (进食是ing对象的列表,getName()是字符串形式的名称,add()是将ings的值相加的函数)
# eating is my list of ing objects
new_eating = []
for i in range(0,len(eating)):
for j in range(i,len(eating)):
if (i != j) and (eating[i].getName() == eating[j].getName()):
eating[i] = eating[i].add(eating[j])
new_eating.append(eating[i])
但这不起作用...
答案 0 :(得分:0)
我建议使用dict对象。与其将所有内容都保存为列表,不如将它们作为键/值对保存,其中键是成分的名称,并将其映射到总计。然后,您可以使用成分名称来合并相同成分的值。
此外,使用defaultdict
会在您第一次尝试访问它们时将它们全部设置为0。
注意,我不知道您的成分类型如何工作,所以这是伪python
from collections import defaultdict
ingredient_totals = defaultdict(lambda ingredient_name : [new ingredient with ingredient_name, and 0 amount])
for ingredient in eating:
ingredient_totals[ingredient.getName()].add(ingredient)
new_eating = list(d.values())
# Maybe sort new_eating