我有一个csv文件,其中有三列(ID、country和candidate(。有四个候选人,我需要创建四个列表(每个候选人一个(。每次候选人的名字出现在名单/栏中时,我都想把这个名字添加到一个新的名单中,然后得到最后一个的长度,看看他们得到了多少票。当我运行脚本时,它成功地打印了投票总数,但每个候选人名单的长度都在打印";0";所以我认为他们没有成功地被列入名单。
我对蟒蛇还相当陌生。我相信我的错误在于循环的方式和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)
您的代码有很多问题。当您在中多次分配变量时
khan = 'Khan'
khan = []
kahn = 0
您不断丢失早期的值。CCD_ 1是CCD_。前两行毫无意义。
votes_cast=str(row[0])
csv
模块只创建字符串,不需要str
一个字符串。
if row[2] == str(khan):
你知道khan
是0
吗?是的,这只是将第2行与字符串";0";,所以我失败了。由于khan
最初应该是字符串,所以您也不应该强制转换它。
有一种更好的方法可以使用字典来跟踪候选计数。代码的一般说明
- 使用字典跟踪候选计数
- 不要明确使用默认值。CCD_ 8打开("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)