Как добавить элемент [1] в списке к элементу [1] в другом списке, если оба элемента имеют общий элемент [2]? - PullRequest
2 голосов
/ 10 мая 2019

Мои извинения, если это уже где-то спрашивали.В этом случае, я был бы признателен за ссылку.

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

Примечание. Это вводный курс по программированию.Я не обучен чему-то очень продвинутому (например, я никогда не пользовался пандой).

Я гуглил несколько дней.Мой учебник класса, к сожалению, не подходит для этой задачи.Если бы мне просто нужно было добавить все элементы в списке или один элемент из каждого списка, основанный ТОЛЬКО на его индексе в списке, я был бы золотым.Это не тот случай, хотя.

Мне предоставили программу оболочки, которая уже определила основной модуль.Часть этого импортировала файл CSV.Каждая строка файла была импортирована в виде списка в списке.Есть 3 пункта в каждом списке.

Examples:
    [  
    [Monday,4.95,Beverages]  
    [Monday,12.95,Food]  
    [Tuesday,4.95,Beverages]  
    [Wednesday,4.95,Beverages]  
    [Thursday,31,Food]  
    [Friday,45,Food]  
    [Saturday,23,Food]  
    [Saturday,12.5,Entertainment]  
    [Friday,25,Entertainment]  
    ]  

Это то, что было предоставлено.

def summarize_by_weekday(expense_list):  

    """  
    Requirement 3 to display the total amount of money spent on each  
    weekday, aggregated per day.  
    That is, display “Monday: $35”, “Tuesday: $54”, etc., where $35 is the  
    sum of dollar amounts for all Mondays present in the data file,   
    $54 is the sum of dollar amounts for all Tuesdays present in the  
    data file, and so on.  
    :param expense_list:  
    :return: None  
    """  

Я много пробовал и отбрасывал их по ходу дела.Итак, я не могу сказать все, что пытался.
С тех пор, как я начал все сначала, я многое получил:

def summarize_by_weekday(expense_list):  
    print ("Summary by weekday:")  
    totAmt == 0  
    for item in expense_data:  
        day = item[0]  
        amount = float(item[1])  
        category = item[2]  
        for line in expense_list:  
            if day == "Monday":  
                totAmt += amount   
                print ("Monday: $",totAmt)  

Моя ошибка
UnboundLocalError: локальная переменная 'totAmt'ссылка перед присваиванием

Я также пробовал это:

for item in expense_data:  
    day = item[0]  
    amount = float(item[1])  
    category = item[2]  
    totAmt == 0  
    for line in expense_list:  
        if day == "Sunday":  
            totAmt = map(lambda x: x + x, amount)  
            print ("Sunday: $",totAmt)  
        elif day == "Monday":  
            totAmt = sum(float(amount))  
            print ("Monday: $",totAmt)  

Моя ошибка
UnboundLocalError: локальная переменная "totAmt" ссылается перед присваиванием

Результаты должны печататься в видепримерно так.

Summary by weekday:  
Sunday: $DDD.CC  
Monday: $DDD.CC  
Tuesday: $DDD.CC  
Wednesday: $DDD.CC  
Thursday: $DDD.CC  
Friday: $DDD.CC  
Saturday: $DDD.CC 

(где $ DDD.CC = общая сумма в долларах и центах.)
Еще лучше, если $ DDD.CC можно оставить выровненным

Не знаюдействительно нужно все это выписать для меня.Я не хочу, чтобы кто-то делал за меня домашнее задание.
Что-то вроде «Ваш код неверен. Попробуйте использовать это», где «это» - как можно меньше кода, чтобы помочь мне в пути.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 10 мая 2019
summary = {}

for day, money, category in expense_list:
    if day in summary:
        summary[day] = summary[day] + float(money)
    else:
        summary[day] = float(money)
for day in summary:
    summary[day] = "$" + str(summary[day])
    print(day + ": " + summary[day])

Это даст вам ответ, который вы ищете.

0 голосов
/ 10 мая 2019

Итак, я нашел свой ответ.Поскольку вы все были так любезны, чтобы помочь, я хотел поделиться этим: Обратите внимание, что это не просто ответ.Я добавил несколько базовых строк print (), чтобы улучшить его.

print ("\n---------------------")  
print (" Summary by weekday")  
print ("---------------------")  
for weekday in ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']:  
    this_day_total = 0.0  
    for expense_item in expense_list:  
        if expense_item[0] == weekday:  
            this_day_total += float(expense_item[1])  
    print("%-9s: $%7.2f" % (weekday, this_day_total))  
print ("---------------------")  

Спасибо за попытку помочь всем!

0 голосов
/ 10 мая 2019

Если вы хотите присвоить значение переменной, которую вы используете '=', '==' для сравнения

def summarize_by_weekday(expense_list):  
    print ("Summary by weekday:")  
    totAmt = 0  
    for item in expense_list:  
        day = item[0]  
        amount = float(item[1])  
        category = item[2]  
        if day == "Monday":  
            totAmt += amount   
            print ("Monday: $",totAmt)
        elif day == 'Tuesday':
            totAmt += amount   
            print ("Tuesday: $",totAmt)
        elif day == 'Wednesday':
            totAmt += amount   
            print ("Wednesday: $",totAmt)
        elif day == 'Thursday':
            totAmt += amount   
            print ("Thursday: $",totAmt)
        elif day == 'Friday':
            totAmt += amount   
            print ("Friday: $",totAmt)
        elif day == 'Saturday':
            totAmt += amount   
            print ("Saturday: $",totAmt)
        else:
            totAmt += amount   
            print ("Sunday: $",totAmt) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...