У меня есть CSV, где он читает транзакцию, как показано ниже

Пеленка Кола Паста

Подгузник Cola Pen

Я хотел бы получить количество элементов каждой транзакции следующим образом:

Подгузник: 1 кола: 1 паста: 1

Подгузник: 1 кола: 1 ручка: 1

Код, который я попробовал:

from collections import Counter

def M():
    list=[]
    DataCaptured= csv.reader(Datafile,delimiter=" ")
    for row in DataCaptured:
        list.append(row)
    Counter(list)

Я получаю список непоправимой ошибки.

-1
KSp 27 Май 2019 в 20:33

2 ответа

Лучший ответ

Некоторые проблемы / исправлены в вашем коде

  • Не используйте встроенные ключевые слова python, такие как list, в качестве переменной списка, используйте другое имя, например, li
  • Вы хотите передать объект файла в csv.reader, а не имя файла
  • Вы хотите добавить Counter в каждую строку в одном списке с помощью li.append(row)

Как только мы исправим это, код изменится на

from collections import Counter
import csv

def M():
    li=[]
    #Open the csv file
    with open('file.txt') as fp:
        DataCaptured = csv.reader(fp,delimiter=' ')
        #Iterate throught each word in csv and add it's counter to the row
        for row in DataCaptured:
            li.append(dict(Counter(row)))
    #Return the list of counters
    return li

print(M())

Выход будет

[{'Diaper': 1, 'Cola': 1, 'Paste': 1}, 
{'Diaper': 1, 'Cola': 1, 'Pen': 1}]
0
Devesh Kumar Singh 27 Май 2019 в 17:59

Вместо этого добавьте (хешируемый) кортеж:

        list.append(tuple(row))
0
J_H 27 Май 2019 в 17:35