2015-04-03 71 views
1

using csv.DictReader to read a csv file into a list of dictionaries时,我如何让每个字典在csv文件中以相同的顺序排序为有序字典?谢谢。从csv文件中读取字典命令dicts

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文件中的排列顺序不一样吗?

回答

1

字典从来没有订购。

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

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

+0

这就是为什么我们使用collections.OrderedDict – Hackaholic 2015-04-03 14:53:00

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])