首页 > 解决方案 > 统计列表中对象的出现次数

问题描述

我有一个 .CSV 文件,其中包含来自网站的 LSAT 答案,例如:

"Test","Question","Section","Question Type","Your Answer","Correct Answer"    
"PT 62","2: 1","LR","Best Principle for Example","D","D"    
"PT 62","2: 2","LR","Strengthen","E","E"    
"PT 62","2: 3","LR","Direct Logic Link","B","B"

... repeat 1,000x

我想开始从这个 .CSV 中获取数据,这样我就可以计算出我得到正确的“问题类型”的百分比(或多少)问题。

我已经查阅了 Python 手册、许多类似类型的论坛问题以及许多 .count 答案,但似乎没有一个适合我想要做的事情。

import csv
import itertools
import json
from collections import Counter

file = open('C:/Users/Kenny/Downloads/logicReasoning.csv')
reader = csv.reader(file)
data = list(reader)

masterList = []
questionTypes =[]

for row in data:
    masterList.append(row[3])
    for x in masterList:
        c = Counter(x)
        masterList.count(x)
        print("total "+x+":", masterList.count(x))

输出

total Justify: 28

total Definition: 28

total Most Similar in Flawed Reasoning: 14

total Resolve Discrepancy: 24

etc, for each question type.

上面的代码打印出一个“问题类型”的列表,加上它在 masterList 中被计算的次数,每次出现问题类型

这样,'Justify 28' 被打印 28 次,每次在 CSV 文件中出现一次。

我只想打印一次“Justify”,它的总数在 CSV 文件中。

然后我将为“问题类型”重新执行相同的代码,以便创建一个新的空列表,并仅在每个实例正确的情况下附加每个实例 - 给出如下:

if row[4] == row[5]:
    correctList.append(row[3])

这是否是按问题类型计算问题总数并按问题类型计算正确问题总数的正确方法,以便我可以得出百分比和其他数据?

标签: pythoncount

解决方案


import csv
from collections import Counter

counter = Counter()
with open('lsat.csv') as fp:
    for row in csv.reader(fp):
        counter[row[3]] += 1

print(counter)
print(list(counter.keys()))
print(counter['Strengthen'])

推荐阅读