Задать вопрос
@tarp20

Как можно упростить данный код?

foo = []

from collections import namedtuple

my_costs = namedtuple('M',['type_', 'amount'])


foo.append(my_costs('food', 4))
foo.append(my_costs('food', 3))
foo.append(my_costs('car',3))
foo.append(my_costs('dog',1))


def sumosts(min_amount, input):
    expences = {}
    for expense in input:
        if expense.amount >= min_amount:
            if not expense.type_ in expences:
                expences[expense.type_] = 0
            expences[expense.type_] = expences[expense.type_] + expense.amount
    print(expences.items())


    for (type_ , amount) in sorted(expences.items(), key = lambda e : e[1], reverse = False):
        print(type_, amount)



sumosts(1, foo)


как можно упростить def sumcosts можно ли вообще??
  • Вопрос задан
  • 153 просмотра
Подписаться 1 Простой 4 комментария
Решения вопроса 1
@kamenyuga
В таком виде код почти ничего не делает. Просто меняет структуру данных - список кортежей превращает в словарь, затем в список кортежей. Единственное значимое изменение - суммирование. Так просто используй сразу подходящую структуру. Например, словарь. И вся функция превращается в одну строчку внутри цикла.
foo = dict()

min_amount = 1
for type_, amount in (('food', 4), ('food', 3), ('car', 3), ('dog', 1)):
    foo[type_] = foo.get(type_, 0) + (amount if amount >= min_amount else 0)

print(*sorted(foo.items(), key=lambda x: x[1]), sep='\n')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы