CSV 转 OrderedDict
我怎么能从csv文件创建一个有序字典(OrderedDict)呢?有没有什么函数可以用?
csv文件内容:
1 one
2 two
有序字典(OrderedDict)结果:
OrderedDict((('1', 'one'), ('2', 'two')))
5 个回答
1
我也遇到过同样的问题,解决起来很简单,就是创建一个子类并调整一下csv函数。下面是我用的代码片段: http://code.activestate.com/recipes/577996-ordered-csv-read-write-with-colum-based-lookup/?in=user-4177968
5
在Python 3中,CSV模块可以导入CSV文件,并直接把每一行转换成OrderedDict
的实例,这样键的顺序就和你的CSV文件中的顺序一致。这和Python 2的表现不同,后者返回的行是普通的字典类型。
import csv
from pprint import pprint
with open(filename) as fd:
for row in csv.DictReader(fd):
pprint(row)
Date,Name,Notes
31 May 2019,Robert,
1 June 2019,Silvio,
OrderedDict([('Date', '31 May 2019'),
('Name', 'Robert'),
('Notes', '')])
OrderedDict([('Date', '1 June 2019'),
('Name', 'Silvio'),
('Notes', '')])
...
9
如果你的csv文件有两个列,像你问题里说的那样,你可以这样做:
import csv
import collections
with open('foo.csv','rb') as f:
r = csv.reader(f)
od = collections.OrderedDict(r)
如果csv文件里的行格式是 键, 值1, 值2, 值3
,你可以这样处理:
with open('foo.csv','rb') as f:
r = csv.reader(f)
od = collections.OrderedDict((row[0], row[1:]) for row in r)