如何获得列表中每个项目的计数

时间:2019-05-27 17:33:16

标签: python-3.x list

我有csv,它在其中读取事务,如下所示

尿布可乐糊

尿布可乐笔

我想按以下方式获取每个交易项目的数量:

尿布: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)

我得到的列表是无法散列的错误。

2 个答案:

答案 0 :(得分:0)

附加(可哈希)元组,相反:

        list.append(tuple(row))

答案 1 :(得分:0)

代码中的某些问题/已解决

  • 请勿将list之类的python内置关键字用于列表变量,而应使用其他名称,例如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}]