为什么我总是收到 typeError 必须是整数?

问题描述 投票:0回答:1
      import csv
      import os

      main_csv = os.path.join("..","Pypoll", "Resources", "election_data.csv")
      dataFile = os.path.join("BallotAnalysis.txt")

      totalBallots = 0
      candidates = []
      ballots = []

      with open(main_csv) as csvFile:
           csvReader = csv.reader(csvFile, delimiter=",")
           csvHeader = next(csvFile)


      for row in csvReader:
           totalBallots += 1

           if row[2] not in candidates:
                 candidates.append(row[2])

                 ballots[row[2]] = 1
           else:
                 ballots[row[2]] += 1

       voteOutput = ""            
       for ballots in candidates:
            votes = candidates.get(ballots) 
            votePCT = (float(votes) / float(totalBallots)) * 100.00

       voteOutput += f"\t{candidates}: {votePCT:.2f}% \n"
       print(voteOutput)

       data = (

            f"\nElection Results\n"
            f"_____________________________________\n"
            f"\tTotal Votes: {totalBallots}\n"
            f"\t        \n"
        )

       print(data)
       with open(dataFile, "w") as textFile:
       textFile.write(data)

我试图为所有 3 名候选人投票,但总是遇到错误: 类型错误:列表索引必须是整数或切片,而不是 str

它在第 22 行,但我猜它会出现在所有这些选票上[行[2]] = 1。我需要修复什么才能获得我想要的输出?

python csv
1个回答
0
投票

TypeError:列表索引必须是整数或切片,而不是 str

您使用

ballots
作为
list
类型,并且要在“选票”中设置新变量,您需要使用整数。例如,
ballots[1] = 1

      ballots = []

      with open(main_csv) as csvFile:
           ...

      for row in csvReader:
           ...
                 ballots[row[2]] = 1
           else:
                 ballots[row[2]] += 1
      ...

在这种情况下,您可以将 row[2] 转换为整数。

© www.soinside.com 2019 - 2024. All rights reserved.