我试图从一个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中只有一个键和一个作为键的值 不想导入其他包 想要一次创造字典

这样做:

mydict = {y[0]: y[1] for y in [x.split(",") for x in open('file.csv').read().split('\n') if x]}

它能做什么?

它使用列表推导式来分割行,最后一个“if x”用于忽略空行(通常在末尾),然后使用字典推导式将空行解压缩到字典中。

其他回答

我建议添加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 dataconverters.commas as commas
filename = 'test.csv'
with open(filename) as f:
      records, metadata = commas.parse(f)
      for row in records:
            print 'this is row in dictionary:'+rowenter code here

如果你有:

csv中只有一个键和一个作为键的值 不想导入其他包 想要一次创造字典

这样做:

mydict = {y[0]: y[1] for y in [x.split(",") for x in open('file.csv').read().split('\n') if x]}

它能做什么?

它使用列表推导式来分割行,最后一个“if x”用于忽略空行(通常在末尾),然后使用字典推导式将空行解压缩到字典中。

通过调用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) 

尝试使用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]}