У меня есть 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
Похожие вопросы
Новые вопросы
python-3.x
По вопросам программирования Python, относящегося к версии языка 3+. Используйте более общий тег [python] для всех вопросов Python и добавляйте его только в том случае, если ваш вопрос зависит от версии. Используйте теги [python-2.x] для вопросов Python 2.