如何循环浏览csv文件并基于列表中的值创建列表?

2024-10-03 13:17:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件,有三列(ID、县和候选人)。有四个候选人,我需要创建四个列表(每个候选人一个)。每次候选人的名字出现在列表/列中时,我都想将该名字添加到新列表中,然后获取最后一个名字的长度,以查看他们获得了多少选票。当我运行脚本时,它成功地打印了投票总数,但每个候选人列表的长度都打印为“0”,因此我认为他们没有成功地添加到列表中

我对python相当陌生。我相信我的错误在于我如何循环和我的if语句

多谢各位

with open(poll_path, 'r') as csvfile:
    csvreader = csv.reader(csvfile, delimiter=',')

#skip the header
    next(csvreader,None)

python/
    votes = 0
    votes = []
    candidate_list = 0
    candidate_list = []
    khan = 'Khan'
    khan = []
    kahn = 0
    correy = "Correy"
    correy = []
    correy = 0
    li = "Li"
    li = []
    li = 0
    otooley = "O'Tooley"
    otooley = []
    otooley = 0
    for row in csvreader:
        votes_cast=str(row[0])
        votes.append(votes_cast)
        candidates=str(row[2])
        candidate_list.append(candidates)
        if row[2] == str(khan):
            khan.append(candidate_list)
            
        if row[2] == str(correy):
            correy.append(candidate_list)
            
        if row[2] == str(li):
            li.append(candidate_list)

        if row[2] == str(otooley):
            otooley.append(candidate_list)
            
    total_votes = len(votes)
    print("Election Results")
    print("----------------------------")
    print("Total Votes: " + str(total_votes))
    print("----------------------------")
    kahn_votes = len(khan)
    print(kahn_votes)
    correy_votes = len(correy)
    print(correy_votes)
    li_votes = len(li)
    print(li_votes)
    otooley_votes = len(otooley)
    print(otooley_votes)

Tags: 列表leniflicandidatelistrowprint
1条回答
网友
1楼 · 发布于 2024-10-03 13:17:10

您的代码有很多问题。在中多次指定变量时

khan = 'Khan'
khan = []
kahn = 0

您不断丢失早期的值kahn0,字符串和列表消失了。前两行毫无意义

votes_cast=str(row[0])

csv模块只创建字符串,不需要str一个字符串

if row[2] == str(khan):

你知道khan是怎样的0吗?是的,这只是比较第2行和字符串“0”,所以我失败了。因为khan首先应该是字符串,所以您也不应该强制转换它

有一个更好的方法可以做到这一点,使用字典来跟踪候选计数。关于守则的一般说明

  • 使用字典跟踪候选计数
  • 不要显式使用默认值open("foo", "r") should be 开放(“foo”)
  • 不要硬编码候选人,只使用文件中的内容
  • 将csv行解压为变量以便于阅读

代码

import csv

candidate_count = {}

with open(poll_path, newline=None) as csvfile:
    csvreader = csv.reader(csvfile)
    for ID, county, candidate in csvreader:
        if candidate not in candidate_count:
            candidate_count[candidate] = 0
        candidate_count[candidate] += 1

# we can sort by total counts to print
for candidate, votes in sorted(candidate_count.items(), key=lambda kv: kv[1]):
    print(candidate, votes)

相关问题 更多 >