我想在Python中将csv作为字典读取,但现在我遇到了一个问题,因为csv包含多次使用的标题,如下所示:
id | 名字 | 标签 | 标签 |
---|---|---|---|
01 | 一个 | 我的任务 | 我的产品 |
02 | 两个 | 我的标签 |
将 csv 导入 python 的标准方法如下所示:
# import csv
import csv
# read csv file to a list of dictionaries
with open('data.csv', 'r') as file:
csv_reader = csv.DictReader(file)
data = [row for row in csv_reader]
print(data)
遗憾的是,如果有多个“标签”值,则此代码会吞掉第一个“标签”值。此代码输出:
[
{'id': '01', 'name': 'one', 'labels': 'myproduct'},
{'id': '02', 'name': 'two', 'labels': 'mylabel'},
]
有没有办法在不变得复杂的情况下读取“标签”的第二个值?我的首选输出如下所示:
[
{'id': '01', 'name': 'one', 'labels': ['mytask', 'myproduct']},
{'id': '02', 'name': 'two', 'labels': 'mylabel'},
]
试试这个:
import csv
from collections import defaultdict
# Read csv file and store data in a defaultdict
with open('data.csv', 'r') as file:
csv_reader = csv.reader(file)
headers = next(csv_reader)
data_dict = defaultdict(list)
for row in csv_reader:
for header, value in zip(headers, row):
data_dict[header].append(value)
# Convert defaultdict to the desired format
data = []
for i in range(len(data_dict[headers[0]])):
row_dict = {header: data_dict[header][i] for header in headers}
for key, value in row_dict.items():
if headers.count(key) > 1:
row_dict[key] = [v for v in data_dict[key][i:] if v]
data.append(row_dict)
print(data)