这有点尴尬,但您可以使用两个默认字典,一个用于跟踪每个人的所有文档,另一个用于记录所有文档值的总和
import csv
import collections
name_sum = collections.defaultdict(int)
docs_for_name = collections.defaultdict(list)
with open("csv1.csv") as csvfile:
csvreader = csv.reader(csvfile)
for row in csvreader:
name_sum[row[1]] += int(row[2])
docs_for_name[row[1]].append(row[0])
with open("outputcsv.csv", "w", newline="") as csvfile:
csvwriter = csv.writer(csvfile)
for key in sorted(name_sum.keys()):
row = [", ".join(sorted(docs_for_name[key])), key, str(name_sum[key])]
print(row)
csvwriter.writerow(row)
您没有发布实际的 csv 文件,只是 csv 文件在 excel 等编辑器中的样子,所以我假设您的 csv 看起来像这样:
doc_01,Bob,5
doc_03,Sam,1
doc_04,Bob,1
这最终会输出一个 csv 文件,例如:
"doc_01, doc_04",Bob,6
doc_03,Sam,1
第一个默认字典 name_sum 只是跟踪每个名称的所有值的总和,所以它最终看起来像
defaultdict(<class 'int'>, {'Bob': 6, 'Sam': 1})
另一个用于跟踪名称的所有文档的默认字典 docs_for_name 最终看起来像:
defaultdict(<class 'list'>, {'Bob': ['doc_01', 'doc_04'], 'Sam': ['doc_03']})
那么您就拥有了在新的 csv 文件中写入每一行所需的所有信息