我试图从一个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文件创建一个字典?谢谢。


当前回答

我建议添加if行,以防文件末尾有空行

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)
        mydict = dict(row[:2] for row in reader if row)

其他回答

一行程序解决方案

import pandas as pd

dict = {row[0] : row[1] for _, row in pd.read_csv("file.csv").iterrows()}
import csv
reader = csv.reader(open('filename.csv', 'r'))
d = {}
for row in reader:
   k, v = row
   d[k] = v

通过调用Open,然后使用csv.DictReader打开文件。

input_file = csv.DictReader(open("coors.csv"))

您可以通过迭代input_file遍历csv文件dict读取器对象的行。

for row in input_file:
    print(row)

或 仅访问第一行

dictobj = csv.DictReader(open('coors.csv')).next() 

更新 在python 3+版本中,这段代码会有一些变化:

reader = csv.DictReader(open('coors.csv'))
dictobj = next(reader) 

许多解决方案已经发布,我想贡献我的解决方案,它适用于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])

我相信您正在寻找的语法如下:

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)
        mydict = {rows[0]:rows[1] for rows in reader}

另外,对于python <= 2.7.1,你需要:

mydict = dict((rows[0],rows[1]) for rows in reader)