поиск каждого элемента списка только один раз - PullRequest
0 голосов
/ 09 июля 2019

Я хочу создать список ингредиентов, но я не знаю, как игнорировать элементы, я уже посчитал ...

попытался удалить посещенные элементы, но это заканчивается ошибками индекса

источник выглядит так:

<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 () - это функция для добавления значений звеньев)

    # 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])

Но это не работает ...

1 Ответ

0 голосов
/ 09 июля 2019

Я бы предложил использовать объект dict. Вместо того, чтобы хранить все в виде списка, вы будете хранить их как пару ключ / значение, где ключ - это имя ингредиента, и оно отображается на общее количество. Затем вы можете объединить значения для одного и того же ингредиента, используя имя ингредиента.

Кроме того, при использовании defaultdict все они будут установлены на 0 при первом обращении к ним.

Обратите внимание, я не знаю, как работает ваш тип ингредиента, так что это псевдопифон

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...