相关疑难解决方法(0)

从csv文件创建字典?

我正在尝试从csv文件创建一个字典.csv文件的第一列包含唯一键,第二列包含值.csv文件的每一行代表字典中唯一的键值对.我试图使用csv.DictReadercsv.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)
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,我得到了一个ValueError: too many values to unpack (expected 2).如何从csv文件创建一个字典?谢谢.

python csv dictionary list-comprehension

125
推荐指数
10
解决办法
32万
查看次数

如何从一行文字创建字典?

我有一个包含数千行的生成文件,如下所示:

CODE,XXX,DATE,20101201,TIME,070400,CONDITION_CODES,LTXT,PRICE,999.0000,QUANTITY,100,TSN,1510000001

某些行具有更多字段而其他行具有更少字段,但所有行都遵循相同的键值对模式,并且每行具有TSN字段.

在对文件进行一些分析时,我写了一个像下面这样的循环来将文件读入字典:

#!/usr/bin/env python

from sys import argv

records = {}
for line in open(argv[1]):
    fields = line.strip().split(',')
    record = dict(zip(fields[::2], fields[1::2]))
    records[record['TSN']] = record

print 'Found %d records in the file.' % len(records)
Run Code Online (Sandbox Code Playgroud)

...这很好,完全符合我的要求(这print只是一个简单的例子).

但是,对我来说它并没有感觉特别"pythonic"和以下行:

dict(zip(fields[::2], fields[1::2]))
Run Code Online (Sandbox Code Playgroud)

这只是感觉"笨重"(它在田野上迭代了多少次?).

是否有更好的方法在Python 2.6中使用标准模块进行此操作?

python parsing dictionary

8
推荐指数
2
解决办法
4145
查看次数

标签 统计

dictionary ×2

python ×2

csv ×1

list-comprehension ×1

parsing ×1