比较列表值并将新值存储在单独的列表中

时间:2018-07-15 16:01:15

标签: python list

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:列表索引必须是整数或切片,而不是列表。”

1 个答案:

答案 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 somelistitem不是索引,它是实际项目。对于for i in dd是列表列表,因此i是子列表之一(行之一)。现在,您应该明白为什么d[i]会混淆Python,并给出“ TypeError:列表索引必须是整数或切片,而不是列表。”