使用Python为CSV中的每个人重置计数器
我对编程比较陌生,一直在尝试学习python。我有一个问题,我花了几个小时在里面,似乎不知道如何解决它 我有一个CSV文件,其中包含一些数据,我想通过数据循环并创建一个字典,其中键是人,值是一个字典,其中键是一个项,值是该项的数量。我还想排除一些我不关心的数据。在这个例子中,我不在乎他们有多少菠萝 CSV数据示例: Name Fruit Bob, Apples Bob, Pineapple Bob, Apples Bob, Oranges Bob, Oranges Bob, Oranges Bob, Kiwi Kate, Oranges Kate, Pineapple Kate, Oranges Kate, Apples Mary, Kiwi Mary, Pineapple 我似乎想不出一个方法来重置每个人的计数器,并且在第一个人之后每个人的计数都是错误的,因为它添加的是整个列表,而不是每个人 实际结果:使用Python为CSV中的每个人重置计数器,python,csv,Python,Csv,我对编程比较陌生,一直在尝试学习python。我有一个问题,我花了几个小时在里面,似乎不知道如何解决它 我有一个CSV文件,其中包含一些数据,我想通过数据循环并创建一个字典,其中键是人,值是一个字典,其中键是一个项,值是该项的数量。我还想排除一些我不关心的数据。在这个例子中,我不在乎他们有多少菠萝 CSV数据示例: Name Fruit Bob, Apples Bob, Pineapple Bob, Apples Bob, Oranges Bob, Oranges Bob, Oranges Bo
{鲍勃:{苹果:2,桔子:3,猕猴桃:1}凯特:{桔子:5,苹果:3}玛丽:{猕猴桃:2,桔子:5,苹果:3}
我可能连正确的方法都没有。打开了解如何解决此问题或更好的解决方法如果您可以假设CSV文件按名称排序(如您给出的示例中所示),则每次遇到新名称时都可以重置
结果列表
:
prevPerson = ''
for row in readCSV:
person = row[0]
fruit = row[1]
if (prevPerson != person):
fruitlist = []
prevPerson = person
if fruit in fruitToAnalyze:
fruitlist.append(fruit)
countedfruitlist = Counter(fruitlist)
final[person] = countedfruitlist
否则,您将为每个人保留一个结果列表
数组,并且只有在完成后,才将其转到Counter
for row in readCSV:
person = row[0]
fruit = row[1]
if fruit in fruitToAnalyze:
if (person not in final):
final[person] = []
final[person].append(fruit)
... # finish code
for person in final.keys():
final[person] = Counter(final[person])
我不确定你是否真的需要柜台。您可以简单地初始化默认字典 注意:此方法不假设您的文件中没有人相互混合
import csv
fruitToAnalyze = {'Apples','Oranges','Kiwi'}
final = {}
with open("data.csv") as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
next(csvfile)
for row in readCSV:
person = row[0]
# Initializes only one person dict
if person not in final:
final[person] = {f: 0 for f in fruitToAnalyze}
fruit_counter = final[person]
fruit = row[1].strip()
if fruit in fruitToAnalyze:
fruit_counter[fruit] += 1
输出
{'Bob':{'Oranges':3,'Kiwi':1,'Apples':2},'Kate':{'Oranges':2,'Kiwi':0,'Apples':1,'Kiwi':1,'Apples':0}
效果很好,但是你能解释一下fruitToAnalyze}行中的{f:0代表f吗。不知道那是干什么的,听懂了。你的第一个例子是我想我必须做的,但不知道如何做。但是第二个更好。虽然这些数据是好的、整洁的、有序的,但我喜欢这样的想法:如果数据不有序,就能够处理它。
import csv
fruitToAnalyze = {'Apples','Oranges','Kiwi'}
final = {}
with open("data.csv") as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
next(csvfile)
for row in readCSV:
person = row[0]
# Initializes only one person dict
if person not in final:
final[person] = {f: 0 for f in fruitToAnalyze}
fruit_counter = final[person]
fruit = row[1].strip()
if fruit in fruitToAnalyze:
fruit_counter[fruit] += 1