我试图从一个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。读者dict:

~ >> cat > 1.csv
key1, value1
key2, value2
key2, value22
key3, value3

~ >> cat > d.py
import csv
with open('1.csv') as f:
    d = dict(filter(None, csv.reader(f)))

print(d)

~ >> python d.py
{'key3': ' value3', 'key2': ' value22', 'key1': ' value1'}

其他回答

许多解决方案已经发布,我想贡献我的解决方案,它适用于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
reader = csv.reader(open('filename.csv', 'r'))
d = {}
for row in reader:
   k, v = row
   d[k] = v

也可以使用numpy。

from numpy import loadtxt
key_value = loadtxt("filename.csv", delimiter=",")
mydict = { k:v for k,v in key_value }

这不是优雅的,而是使用熊猫的一行解决方案。

import pandas as pd
pd.read_csv('coors.csv', header=None, index_col=0, squeeze=True).to_dict()

如果你想为你的索引指定dtype(如果你使用index_col参数,它不能在read_csv中指定,因为有一个bug):

import pandas as pd
pd.read_csv('coors.csv', header=None, dtype={0: str}).set_index(0).squeeze().to_dict()

如果你可以使用numpy包,那么你可以像下面这样做:

import numpy as np

lines = np.genfromtxt("coors.csv", delimiter=",", dtype=None)
my_dict = dict()
for i in range(len(lines)):
   my_dict[lines[i][0]] = lines[i][1]