2013-01-14 25 views
1

我有一個.csv文件與內容(例如)Python的Dictreader排序字段名

Attributes,Description,Dial-Up 
4,2,0.2 
3,1,0.4 

使用dictreader:

dictreader = csv.DictReader(open(filename, "rb"), delimiter=',') 
dictdata = {} 
count=0 
for row in dictreader: 
    dictdata[count]=row 
    count=count+1 

而且使用作家在顯示錶或我會得到:

Dial-Up,Attributes,Description 
0.2,4,2 
0.4,3,1 

那麼如何排序字段名?

+1

請包括創建顯示的代碼。這是幫助你的關鍵一步。因爲這實際上就是你的問題所在。 –

+1

'dict'類型是未排序的。你爲什麼使用'DictReader'? 'csv.reader'可能就是你想要的。 –

回答

4

DictReader存儲在屬性中的字段(字典鍵)稱爲fieldnames

fields = dictreader.fieldnames 
print(fields) 
# ['Attributes', 'Description', 'Dial-Up'] 

因此打印的行值順序如下:

print(','.join(fields)) 
for row in dictreader: 
    print(','.join(row[field] for field in fields)) 

產量

Attributes,Description,Dial-Up 
4,2,0.2 
3,1,0.4 

或者,使用@JonClements'的想法:

import operator 
fields = dictreader.fieldnames 
getfields = operator.itemgetter(*fields) 
for row in dictreader: 
    print(','.join(getfields(row))) 

使用operator.itemgetter是,這是比使用列表理解更快的動機:

In [70]: %timeit getfields(row) 
10000000 loops, best of 3: 174 ns per loop 

In [71]: %timeit [row[field] for field in fields] 
1000000 loops, best of 3: 272 ns per loop 
+0

或者 - 'print(','。join(itemgetter(* fields)))' –

+0

@JonClements:你使用'itemgetter'的代碼導致一個'TypeError'。 – martineau

+0

@martineau嗯,我承認沒有測試它,但看不出爲什麼 - 而且似乎工作unutbu如何實現它 –