2015-04-03 68 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])