使用标题从csv创建字典

时间:2017-07-19 18:55:02

标签: python

我有一个csv文件,看起来像:

a, b, c, d
1, 1, 2, 2
2, 3, 3, 4
2, 2, 1, 1

我想将这个csv文件加载到字典中,以便我可以

dict['a'] = 1, 2, 2
dict['b'] = 1, 3, 2
dict['c'] = 2, 3, 1
dict['d'] = 2, 4, 1

有没有办法在csv阅读器级别做到这一点?

我到目前为止:

    import csv

    headers = {}

    with open('file.csv') as csvfile:

        reader = csv.reader(csvfile, delimiter = ',')
        count = 0;
        for row in reader:
            if count == 0:
                for field in row:
                    if field not in headers.keys():
                        headers[field] = []
            count +=1   

这会加载标题,现在我想加载每个值。

3 个答案:

答案 0 :(得分:3)

您可以使用DictReader。 然而, 如果输入文件包含字段值周围的空格, 他们需要手动剥离。

import csv

with open('file.csv') as csvfile:
    reader = csv.DictReader(csvfile, skipinitialspace=True)
    d = {name: [] for name in reader.fieldnames}
    for row in reader:
        for name in reader.fieldnames:
            d[name].append(row[name])
    print(d)

感谢@temporalwolf使用Dialect.skipinitialspace技巧!

答案 1 :(得分:2)

尝试使用pandas:

import pandas as pd

df = pd.read_csv('YOUR_PATH_HERE')

your_dict = df.to_dict(orient='list')

输出:

{'a': [1, 2, 2], ' b': [1, 3, 2], ' c': [2, 3, 1], ' d': [2, 4, 1]}

此外,Pandas Dataframes可能是一个非常好的工具,而不是使用字典。以下是关于to dict

的文件

答案 2 :(得分:2)

你可以试试这个,只需使用内置的csv模块和字典理解:

import csv

data = list(csv.reader(open('file.csv')))

final_data = {i[0]:map(int, i[1:]) for i in zip(*data)}

输出:

{'a': [1, 2, 2], ' b': [1, 3, 2], ' d': [2, 4, 1], ' c': [2, 3, 1]}