簡體   English   中英

python從csv文件寫字典

[英]python write dictionary from csv file

我現在正努力從csv文件編寫字典。

csv文件的格式如下:

student,    Test 1, Test 2, Test 3, Final Exam
A,          9,      19,    9,       22
B,          10,     16,    9,       26
C,          11,     17,    8,       27
D,          7,      14,    9,       18
E,          8,      20,    8,       23
weight,     0.15,   0.25,  0.2,     0.4
max_points  12      20     9        30

其中2-6行是學生的姓名,即每項考試的分數。 最后兩行分別代表每個測試的權重和每個測試的滿分。

現在,我想根據此列表創建一個字典,如下所示:

{'Test 1': {'weight': '0.15', 'max_points': '12'}, 
'Test 2': {'weight': '0.25', 'max_points': '20'}, 
'Test 3': {'weight': '0.2',   'max_points': '9'}, 
'Final Exam': {'weight': '0.4', 'max_points': '30'}}

其中鍵是csv文件中第一行的變量,但變量student除外; 在每個嵌套字典中,鍵是csv文件中第一列和最后兩行的名稱:weight,max_points。 相應的值分別只是其行中的值。

到目前為止,我唯一想到的是:

reader = csv.DictReader(open('gradebook.csv'))
for row in reader:
    key = row.pop('Student')

而且我不知道如何進行。 非常感謝您的幫助!!!

使用熊貓,這是一個班輪

import pandas as pd

df = pandas.read_csv('myfile.csv', delim_whitespace=True)
{ k: { 'max_points': df[k].max(), 'weight': df[k][5] } for k in df.keys()[1:] }

編輯。 對不起,我發現OP實際上並不是在尋找max()

{ k: { 'max_points': df[k][6], 'weight': df[k][5] } for k in df.keys()[1:] }

順便說一句,如果熊貓無法正確識別您的標頭

df = pd.read_csv('/tmp/df.txt',delim_whitespace=True, header=1, names=['Student','Test 1','Test 2','Test 3','Final Score'])

這是一個不使用熊貓就可以做到的方法。 請注意,盡管我的csv文件是實際的 csv文件,所以您可能需要相應地調整閱讀器的創建。

In [13]: reader = csv.DictReader(open('tests.csv'))

In [14]: record = defaultdict(dict)

In [15]: for row in reader:
    ...:    if row['Student'] == 'weight':
    ...:        for header in reader.fieldnames[1:]:
    ...:            record[header]['weight'] = row[header]
    ...:    if row['Student'] == 'max_points':
    ...:        for header in reader.fieldnames[1:]:
    ...:            record[header]['max_points'] = row[header]


In [17]: from pprint import pprint

In [18]: pprint(record)
defaultdict(<class 'dict'>,
            {'Final Exam': {'max_points': '30', 'weight': '0.4'},
             'Test 1': {'max_points': '12', 'weight': '0.15'},
             'Test 2': {'max_points': '20', 'weight': '0.25'},
             'Test 3': {'max_points': '9', 'weight': '0.2'}})

如果您以前從未見過defaultdict ,那么當您嘗試訪問尚不存在的鍵時,傳遞給構造函數的內容將用作值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM