как я могу подсчитать, сколько каждого продукта купил человек

#python-3.x

#python-3.x

Вопрос:

как я могу подсчитать, сколько каждого продукта купил человек, если у меня есть словарь, в котором есть фамилия, тип продукта и сколько он его купил

Вот мой код, который создает словарь:

 with open("Input_1.txt", "r") as file:
    dict_2 = {}
    for line in file:
        Surname = line.split() [0]
        Item = line.split()[1]
        Amount=line.split()[2]
        dict_2[Surname] = {Item: Amount}
    print(dict_2)
  

например, что он должен напечатать:
{«Иванов» {«aaa» 23}, «Петров» {«aaa» 58} и так далее

Это данные из моего текстового файла:

Иванов ааа 1
Петров ааа 2
Сидоров ааа 3
Иванов ааа 6
Петров ааа 7
Сидоров ааа 8
Иванов ввв 3
Петров ввв 7
Сидоров ааа 345
Иванов ссс 45
Петров ddd 34
Зиборов eee 234
Иванов ааа 45
Иванов бумага 10
Петров ручки 5
Иванов маркер 3
Иванов бумага 7
Петров конверт 20
Иванов конверт 5

Ответ №1:

Если вам нужно простое решение на python, вы можете изменить свой код на:

 with open('Input_1.txt', 'r') as file:
    dict_2 = {}
    for line in file:
        surname, item, amount = line.split()
        amount = int(amount)
        if surname not in dict_2:
            dict_2[surname] = {}
        if item not in dict_2[surname]:
            dict_2[surname][item] = amount
        else:
            dict_2[surname][item]  = amount
  

Это даст вам следующий словарь:

 Ivanov
     aaa : 52
     bbb : 3
     ccc : 45
     paper : 17
     marker : 3
     envelope : 5
Petrov
     aaa : 9
     bbb : 7
     ddd : 34
     pens : 5
     envelope : 20
Sidorov
     aaa : 356
Ziborov
     eee : 234
  

Но это может быть хорошим шансом попробовать pandas пакет. Это очень полезно при работе с вашими данными. Смотрите тот же код, что и выше, но с использованием pandas

 import pandas as pd
my_data = pd.read_csv('Input_1.txt', names=['Surname', 'Item', 'Amount'], sep=' ')
result = my_data.groupby(['Surname', 'Item']).sum()

print(result)
  

Это дает вам следующий фрейм данных:

                   Amount
Surname Item            
Ivanov  aaa           52
        bbb            3
        ccc           45
        envelope       5
        marker         3
        paper         17
Petrov  aaa            9
        bbb            7
        ddd           34
        envelope      20
        pens           5
Sidorov aaa          356
Ziborov eee          234