Python 基于列表中的其他属性对属性求和

Python 基于列表中的其他属性对属性求和,python,list,count,counter,frequency,Python,List,Count,Counter,Frequency,基本上,我有一个csv文件,其中包含如下所示的数据: ['Store A', '2015-03-04', '00948', 'Red','A','AA'] ['Store C', '2015-05-06', '00948', 'Blue','A','BB'] ['Store B', '2015-07-08', '101130', 'Red','B','CC'] ['Store A', '2015-09-10', '111011', 'Blue','C','DD'] ['Store C', '20

基本上,我有一个csv文件,其中包含如下所示的数据:

['Store A', '2015-03-04', '00948', 'Red','A','AA']
['Store C', '2015-05-06', '00948', 'Blue','A','BB']
['Store B', '2015-07-08', '101130', 'Red','B','CC']
['Store A', '2015-09-10', '111011', 'Blue','C','DD']
['Store C', '2015-10-11', '101510', 'Red','A','EE']
['Store B', '2015-11-12', '101459', 'Red','B','FF']
['Store C', '2015-15-04', '01836', 'Blue','C','GG']
['Store B', '2015-30-05', '02201', 'Blue','A','HH']
['Store A', '2015-18-06', '04022', 'Red','C','II']
['Store C', '2015-07-07', '11056', 'Blue','B','JJ']
['Store C', '2015-08-05', '10149', 'Red','D','KK']
['Store A', '2015-10-04', '113569', 'Red','A','LL']
['Store B', '2015-12-03', '005410', 'Blue','C','MM']
['Store A', '2015-15-02', '053410', 'Blue','E','NN']
['Store A', '2015-16-04', '113410', 'Red','J','OO']
我想确定单词“Blue”在每个列表中出现的次数,这样输出基本上就是单词“Blue”的总和。给定第一个属性,即存储A、B和C,需要的输出应该是:

['Store A','Blue','2']
['Store B','Blue','2']
['Store c','Blue','3']
我的代码如下:

csvReader = csv.reader(open('count.csv','rb'), delimiter=',', quotechar='"')
for line in csvReader:
    print line.count('Blue')
显然,结果是:

>>> 
0
0
0
.
.
.
.
0
0
我还尝试了以下代码:

csvReader = csv.reader(open('count.csv','rb'), delimiter=',', quotechar='"')
for line in csvReader:
    count_blue= [[x, line.count('Blue')] for x in set(line)]
    print count_blue

它也没有给我所需的输出。我好像犯了什么错?感谢您的帮助。

这看起来不像CSV文件,它看起来像是每行一个Python列表。用
literal\u eval
读取它,并将它输入到
计数器

from ast import literal_eval
from collections import Counter

blues = Counter()
with open("count.csv") as f:
    for line in f:
        ls = literal_eval(line)
        if ls[3] == 'Blue':
            blues[ls[0]] += 1
如果要以所需的输出格式打印:

for key in blues:
    print("['{}', 'Blue', {}]".format(key, blues[key]))

我将假设您的CSV文件实际上是一个CSV文件。逗号是分隔符,引号是单引号字符

计算第0列中每个存储出现第3列(从零开始)的次数需要按第0列对数据进行分组。一种方法是使用字典。A
collections.defaultdict
是一种字典类型,它可以方便地使用公共键收集值列表。一旦你们有了这些,你们就可以制作出“蓝色”或者“红色”或者其他你们可能有的东西

import csv
from collections import defaultdict

d = defaultdict(list) 
with open('count.csv') as f:
    for row in csv.reader(f, quotechar="'"):
        d[row[0]].append(row[3])

    for k in sorted(d):
        print('{},{}'.format(k, d[k].count('Blue')))
输出

Store A,2 Store B,2 Store C,3 商店A,2 B店,2号 C店,3号
您的分隔符设置为
。它将根据
而不是换行来分割您的输入。尝试在
for
循环中的
打印(行)
,这样您就可以准确地看到正在输入的行。您的csv是否真的包含这些数据(python列表)?或者你把数据的python表示放在这里?非常感谢!这有帮助!HI @ TouyAD.SerDo如果这个或任何答案已经解决了你的问题,请考虑点击检查标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。