我试图从一个csv文件创建一个字典。csv文件的第一列包含唯一的键,第二列包含值。csv文件的每一行都表示字典中的唯一键、值对。我尝试使用csv文件。DictReader和csv。类的DictWriter,但我只知道如何为每一行生成一个新字典。我想要一本字典。这是我试图使用的代码:

import csv

with open('coors.csv', mode='r') as infile:
    reader = csv.reader(infile)
    with open('coors_new.csv', mode='w') as outfile:
    writer = csv.writer(outfile)
    for rows in reader:
        k = rows[0]
        v = rows[1]
        mydict = {k:v for k, v in rows}
    print(mydict)

当我运行上面的代码时,我得到一个ValueError:太多的值来解包(预期2)。我如何从csv文件创建一个字典?谢谢。


当前回答

下面是一个CSV to Dict的方法:

import pandas

data = pandas.read_csv('coors.csv')

the_dictionary_name = {row.k: row.v for (index, row) in data.iterrows()}

其他回答

import csv
reader = csv.reader(open('filename.csv', 'r'))
d = {}
for row in reader:
   k, v = row
   d[k] = v

下面是一个CSV to Dict的方法:

import pandas

data = pandas.read_csv('coors.csv')

the_dictionary_name = {row.k: row.v for (index, row) in data.iterrows()}

尝试使用defaultdict和DictReader。

import csv
from collections import defaultdict
my_dict = defaultdict(list)

with open('filename.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for line in csv_reader:
        for key, value in line.items():
            my_dict[key].append(value)

它返回:

{'key1':[value_1, value_2, value_3], 'key2': [value_a, value_b, value_c], 'Key3':[value_x, Value_y, Value_z]}

许多解决方案已经发布,我想贡献我的解决方案,它适用于CSV文件中不同数量的列。 它创建一个每列有一个键的字典,每个键的值是一个包含该列元素的列表。

    input_file = csv.DictReader(open(path_to_csv_file))
    csv_dict = {elem: [] for elem in input_file.fieldnames}
    for row in input_file:
        for key in csv_dict.keys():
            csv_dict[key].append(row[key])

假设你有一个这样结构的CSV:

"a","b"
1,2
3,4
5,6

你希望输出是:

[{'a': '1', ' "b"': '2'}, {'a': '3', ' "b"': '4'}, {'a': '5', ' "b"': '6'}]

zip函数(还没有提到)非常简单,而且非常有用。

def read_csv(filename):
    with open(filename) as f:
        file_data=csv.reader(f)
        headers=next(file_data)
        return [dict(zip(headers,i)) for i in file_data]

如果你更喜欢熊猫,它也可以很好地做到这一点:

import pandas as pd
def read_csv(filename):
    return pd.read_csv(filename).to_dict('records')