CSV 转 OrderedDict

5 投票
5 回答
9517 浏览
提问于 2025-04-16 18:24

我怎么能从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)

撰写回答