Python 有没有办法将csv作为字典读取并向输出中添加一些字段?

Python 有没有办法将csv作为字典读取并向输出中添加一些字段?,python,dictionary,Python,Dictionary,这是示例csv文件: name,subject_1,subject_2,subject_3,subject_4,subject_5 Artus Syne,43,71,55,16,51 Evey Reburn,49,7,53,50,63 Giff Wickmann,63,37,21,87,9 Garrot Casetta,22,3,91,75,52 Roselle Maes,71,90,96,79,48 Torin Ziehms,71,31,83,1,25 Jaye Etock,92,9,2,78

这是示例csv文件:

name,subject_1,subject_2,subject_3,subject_4,subject_5
Artus Syne,43,71,55,16,51
Evey Reburn,49,7,53,50,63
Giff Wickmann,63,37,21,87,9
Garrot Casetta,22,3,91,75,52
Roselle Maes,71,90,96,79,48
Torin Ziehms,71,31,83,1,25
Jaye Etock,92,9,2,78,55
Thomasina Tinkham,25,78,46,46,90
Adolphus Biernat,91,96,98,94,100
Rex Aspinell,34,75,51,38,99
我需要使用字典进行类似的输出:

{
    'Artus Syne': {'marks': [43.0, 71.0, 55.0, 16.0, 51.0]},
    'Evey Reburn': {'marks': [49.0, 7.0, 53.0, 50.0, 63.0]},
    'Giff Wickmann': {'marks': [63.0, 37.0, 21.0, 87.0, 9.0]},
    'Garrot Casetta': {'marks': [22.0, 3.0, 91.0, 75.0, 52.0]},
    'Roselle Maes': {'marks': [71.0, 90.0, 96.0, 79.0, 48.0]},
    'Torin Ziehms': {'marks': [71.0, 31.0, 83.0, 1.0, 25.0]},
    'Jaye Etock': {'marks': [92.0, 9.0, 2.0, 78.0, 55.0]},
    'Thomasina Tinkham': {'marks': [25.0, 78.0, 46.0, 46.0, 90.0]},
    'Adolphus Biernat': {'marks': [91.0, 96.0, 98.0, 94.0, 100.0]},
    'Rex Aspinell': {'marks': [34.0, 75.0, 51.0, 38.0, 99.0]}
}
dict_reader={rows[0]:[rows[1],rows[2],rows[3],rows[4],rows[5]]用于reader}

显示以下输出:

{'Artus Syne': ['43', '71', '55', '16', '51'], 'Evey Reburn': ['49', '7', '53', '50', '63'], 'Giff Wickmann': ['63', '37', '21', '87', '9'], 'Garrot Casetta': ['22', '3', '91', '75', '52'], 'Roselle Maes': ['71', '90', '96', '79', '48'], 'Torin Ziehms': ['71', '31', '83', '1', '25'], 'Jaye Etock': ['92', '9', '2', '78', '55'], 'Thomasina Tinkham': ['25', '78', '46', '46', '90'], 'Adolphus Biernat': ['91', '96', '98', '94', '100'], 'Rex Aspinell': ['34', '75', '51', '38', '99']}
如何在键和值对的输出之间添加
“标记”

dict_reader = {rows[0]:{"marks": [rows[1],rows[2],rows[3],rows[4],rows[5]]} for rows in reader} # ??

该行在您的键和值列表之间添加“标记”。

从您的问题中真正最少的代码中:

dict_reader = {rows[0]:[rows[1],rows[2],rows[3],rows[4],rows[5]] for rows in reader}
很明显,您至少听说过,并且有点熟悉-但您只是没有充分利用它们在重新排列和重新格式化迭代数据(即,在本例中为CSV文件中的行数据)方面所允许的灵活性-只要遵循
key:value
配对的基本模式(并且不要让代码变得如此复杂以至于不再可读)

这里的情况就是这样,因此在代码中,第一个元素(学生的名字)成为子字典中的一个键,子字典由硬编码键
“marks”
键组成,其值是所有剩余行元素的列表(通过对象
行[1://code>引用)

除了需要更少的代码和比单独指定其他项目更快的执行速度之外,使用
切片
可以使代码更通用,并且与每行名称后面的确切等级数无关,因此,如果将来等级数发生变化,代码不会失败或需要更改

import csv

filepath = 'grades.csv'

with open(filepath, 'r', newline='') as file:
    reader = csv.reader(file)
    next(reader)  # Skip header row.
    rows = {row[0]: {'marks': row[1:]} for row in reader}

from pprint import pprint
pprint(rows, sort_dicts=False)

看到快乐了吗,伙计?稍微好一点,但也不比“这段代码回答了你的问题”或原来的“什么都没有”好多少。请随意添加编辑