import csv
with open("DADSA RESIT CWK JULY 2018.csv", newline='') as f:
r = csv.reader(f)
database = list(r)
del database[0]
names = []
names.append([])
def fillnames(d, n):
for j in n:
for i in d:
if d[i][0] == n[j][0] and d[i][1] == n[j][1]:
n[i][2] = n[i][2]+1
else:
names.append([d[i][0], d[i][1], 0])
fillnames(database, names)
for i in names:
print(i)
这里的代码是我将csv文件扫描到一个列表中。然后,我想通过将每个新名称扫描到一个单独的列表中,然后每次找到一个新名称时增加找到的编号,来计算共享同一名称的条目数。每次我运行这段代码时,它都会返回“ TypeError:列表索引必须是整数或切片,而不是列表。”
答案 0 :(得分:2)
如果您不需要database
:
import csv
from collections import Counter
with open("DADSA RESIT CWK JULY 2018.csv", newline='') as f:
reader = csv.reader(f)
next(reader) # discard headers
name_counts = Counter((row[0], row[1]) for row in reader)
如果您确实需要database
:
import csv
from collections import Counter
with open("DADSA RESIT CWK JULY 2018.csv", newline='') as f:
reader = csv.reader(f)
next(reader) # discard headers
database = list(reader)
name_counts = Counter((row[0], row[1]) for row in database)
您原始代码中的根本错误是:
for i in d:
if d[i] ...
在Python中执行for item in somelist
时item
不是索引,它是实际项目。对于for i in d
,d
是列表列表,因此i
是子列表之一(行之一)。现在,您应该明白为什么d[i]
会混淆Python,并给出“ TypeError:列表索引必须是整数或切片,而不是列表。”