使dicts从csv文件中读取有序的dicts

时间:2015-04-03 14:40:52

标签: python csv dictionary

using csv.DictReader to read a csv file into a list of dictionaries时,如何使每个字典成为csv文件中以相同顺序排序的有序字典?感谢。

import csv
import collections
with open("in.csv") as csvfile:
    reader = csv.DictReader(csvfile,delimiter=" ")
    lst = list(reader)
    lst_orderedDict = [collections.OrderedDict(x) for x in lst]

lst_orderedDict中的每个有序字典在csv文件中的排序方式不一样吗?

2 个答案:

答案 0 :(得分:3)

将OrderedDict与csv.reader

一起使用
from collections import OrderedDict
with open("in.csv") as csvfile:
    reader = csv.reader(csvfile,delimiter=" ")
    keys = next(reader)
    print([OrderedDict(zip(keys,row)) for row in reader ])


[OrderedDict([('first_name', 'Baked'), ('last_name', 'Beans')]), OrderedDict([('first_name', 'Lovely'), ('last_name', 'Spam')]), OrderedDict([('first_name', 'Wonderful'), ('last_name', 'Spam')])]

或者将两者结合起来:

from collections import OrderedDict

with open("in.csv") as csvfile:
    reader = csv.DictReader(csvfile,delimiter=" ")
    keys = reader.fieldnames
    r = csv.reader(csvfile,delimiter=" ")
    print([OrderedDict(zip(keys, row)) for row in r])

答案 1 :(得分:1)

字典永远不会被订购。

但是,您可以按照您想要的任何顺序列出字典的键。不是以随机顺序迭代字典,而是遍历您的密钥列表,并通过密钥从字典中获取每个项目。

密钥列表来自哪里?您可以在DictReader对象的构造函数中指定它(请参阅docs),也可以使用读取第一行时设置的fieldnames属性。