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

2024-10-02 18:17:41 发布

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

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


Tags: csv代码inimport名称列表fornames
1条回答
网友
1楼 · 发布于 2024-10-02 18:17:41

如果您不需要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 d的情况下,d是列表的列表,因此i是子列表之一(行之一)。现在您应该明白了为什么Python会被d[i]搞糊涂,并给出“TypeError:列表索引必须是整数或片,而不是列表。”

相关问题 更多 >